当过滤条件传递给我的LINQ查询时,没问题:
Dim statesSelected As String = {‘GA’,’FL’}
Dim results As IEnumerable(Of Person) = _
From p As Person in dc.Persons _
Where statesSelected.Contains(p.StateCode)
但是,如果没有选择过滤条件,那么我希望返回所有状态(而不是上面所做的那些)。我该怎么办?我意识到我可以在查询周围有一个IF语句,但实际上我会有很多过滤器(并且希望在一个查询中处理它们)。
感谢您的帮助。
答案 0 :(得分:0)
我不确定这是否会转换为SQL,但您可以尝试这种方法:
Dim results As IEnumerable(Of Person) = _
From p As Person in dc.Persons _
Where statesSelected Is Nothing OrElse statesSelected.Contains(p.StateCode)
在这种情况下,如果你的变量statesSelected
什么都不是,那么只会执行查询的第一部分,否则第一部分将为真,只有第二部分才重要
答案 1 :(得分:0)
试试这个:
Dim results As IEnumerable(Of Person) = _
From p As Person In Persons
Where If(statesSelected.Length < 1, p.StateCode <> "", statesSelected.Contains(p.StateCode))
它正在做的是检查以确保statesSelected具有元素。如果没有,它只会带回所有元素。如果statesSelected中有值,则会返回包含该状态的值。
魔法发生在三元组If():https://msdn.microsoft.com/en-us/library/bb513985.aspx?f=255&MSPPError=-2147217396