2017-03-16 8 views
0

私はいくつかのオブジェクトを持つリストを持っています。私はそのリストの中でlinqを実行し、次の条件を持つ別のリストを "サブリスト"とする必要があります 1)アイテムのステータスが "完了"で、5日間で完了した日付の場合、サブリスト に含める2) "保留中"であり、期日が7日未満の場合は、サブリストに含めますLinqで複数のif条件でリストをフィルタリングするには

これを単一のlinqクエリでどのように実現できますか? 事前にサポートいただきありがとうございます

+2

あなたが試したことを示してください。あなたがここにどのような問題があるのか​​はっきりしない –

答えて

1

IEnumerable.Whereメソッドは、条件を満たす述語で使用できます。私はあなたのオブジェクトモデルは、私は1つの例として表示するように作ってあげるか分からないので:

Public Class SomeObject 
    Public Property Status As String 
    Public Property Complete As DateTime? 
    Public Property DueDate As DateTime? 

    Public Sub New(strStatus As String, dteComplete As DateTime?, dteDueDate As DateTime?) 
     Status = strStatus 
     Complete = dteComplete 
     DueDate = dteDueDate 
    End Sub 
End Class 

一部のデータ人口:

Dim lstObjects As New List(Of SomeObject) 

lstObjects.Add(New SomeObject("Complete", DateTime.Now.AddDays(-1), DateTime.Now.AddDays(-1))) 
lstObjects.Add(New SomeObject("Pending", Nothing, DateTime.Now.AddDays(5))) 
lstObjects.Add(New SomeObject("Pending", Nothing, DateTime.Now.AddDays(10)))  

そして、これはあなたがそれを照会することができる方法ですが(二つの結果を返します。 ):

Dim sublist As List(Of SomeObject) = lstObjects.Where(Function(target As SomeObject) 
                  Dim bolMatch As Boolean = False 

                  If (target.Status = "complete" AndAlso 
                   target.Complete > DateTime.Now.Date.AddDays(-5)) OrElse 
                  (target.Status = "pending" AndAlso 
                   target.DueDate < DateTime.Now.Date.AddDays(7)) Then 
                   bolMatch = True 
                  End If 

                  Return bolMatch 
                 End Function).ToList() 
+0

すばらしいこと...その仕事..........ありがとう@NoAlias – isree

+0

私は助けてくれると嬉しいです。答えが役に立つなら、投票してください。 – N0Alias

関連する問題