【问题标题】:Optional requirement on where clause in LINQ [duplicate]LINQ 中 where 子句的可选要求 [重复]
【发布时间】:2013-06-03 01:53:51
【问题描述】:

我们的目标是构建一个可以在多个字段搜索中输入的搜索表单。但输入所有字段是可选的。 LINQ 中的等效代码是什么? 谢谢。

string str = "";
if(a!="")
    str += "f1 == a";
if(b!="")
    str += " && f2 == b";
if(c!="")
    str += " && f3 == c";

select f1, f2, f3 from p
where str;

【问题讨论】:

    标签: sql linq


    【解决方案1】:

    您可以按相同的方式按顺序构建查询,如下所示:

    var query = someData.Items;
    
    if  (a != string.Empty)
        query = query.Where(x => x.f1 == a);
    
    if (b != string.Empty)
        query = query.Where(x => x.f2 == b);
    

    ……等等。最后,您构建了一个仅包含相关谓词的查询。

    【讨论】:

    • +1 用于实际使用 LINQ 功能,并给出一个比让 SQL Server/LINQ 驱动程序尝试优化不相关部分(通常是这样吗?确实如此,但并非总是如此)
    【解决方案2】:

    试试

    from x in p where (x.f1 == a || a == "") && (x.f2 == b || b == "") && (x.f3 == c || c == "") select new { f1 = x.f1, f2 = x.f2, f3 = x.f3 }
    

    每个搜索变量上的或使其在空字符串时被忽略。我假设您已经处理了 a、b、c 中的空值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多