LINQ中where子句的可选要求

时间:2013-06-03 01:53:51

标签: sql linq

目标是构建一个可以在多个字段搜索中输入的搜索表单。但是输入所有字段都是可选的。 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;

2 个答案:

答案 0 :(得分:4)

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

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 :(得分:1)

尝试

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中处理了空值。