2017-03-16 85 views
0

我有一个包含一些对象的列表。我需要在该列表中执行linq以获得另一个列表说“子列表”,其条件如下: 1)如果项目状态为“完成”并且在5天内完成日期,则包括到子列表中 2)如果项目状态是“待定”和到期日期少于7天,包括到子列表中我们如何过滤Linq中的多个条件列表

我怎么能用一个linq查询来实现? 感谢您提前给予的支持

+2

请显示您的尝试。目前还不清楚你在这里有什么样的问题 –

回答

1

您可以使用IEnumerable.Where方法与谓词有你的条件。因为我不知道你的对象模型,我会做出一个显示为例:

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

很好......它的工作.......... Thankuuu @NoAlias – isree

+0

我很高兴能帮上忙。如果答案有用,请投票。 – N0Alias