【问题标题】:How NOT filter LINQ results if criteria list is empty?如果条件列表为空,如何不过滤 LINQ 结果?
【发布时间】:2015-09-28 05:21:20
【问题描述】:

当过滤条件传递给我的 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 语句,但实际上我会有很多过滤器(并且希望在一个查询中处理它们)。

感谢您的帮助。

【问题讨论】:

  • 尝试如果其他方法!

标签: vb.net linq linq-to-sql contains


【解决方案1】:

试试这个:

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

【讨论】:

  • 谢谢!我很感激。
【解决方案2】:

我不确定这是否会转化为 SQL,但您可以尝试这种方法:

Dim results As IEnumerable(Of Person) = _
From p As Person in dc.Persons _
Where statesSelected Is Nothing OrElse statesSelected.Contains(p.StateCode)

在这种情况下,如果您的变量 statesSelected 什么都不是,那么只会执行查询的第一部分,否则第一部分将为真,只有第二个条件很重要

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-08
    • 2013-07-04
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多