如何在Linq中创建复合"或"子句?

Sha*_*ica 5 c# linq

如果你在Linq查询中添加"和"条件,那么很容易就这样做:

var q = MyTable;
if (condition1)
  q = q.Where(t => t.Field1 == value1);
if (condition2)
  q = q.Where(t => t.Field2 > t.Field3);
// etc.
Run Code Online (Sandbox Code Playgroud)

当你想添加"或"条件时,有没有聪明的方法做同样的事情?

Var*_*ant 6

您可以使用PredicateBuilder并使用它来构建Or基于表达式:

 var predicate = PredicateBuilder.False<Product>();

 predicate = predicate.Or (t => t.Field1 == value1);
 predicate = predicate.Or (t => t.Field2 > t.Field3);

 q = q.Where (predicate);
Run Code Online (Sandbox Code Playgroud)

您可以在这里阅读更多相关信息:http: //www.albahari.com/nutshell/predicatebuilder.aspx

用您查询的对象替换Productin PredicateBuilder.False<Product>().

请注意,您可以False根据需要从谓词开始Or.如果你想要一个And谓词,Yuo应该从a开始True