LINQ WHERE与OR

我使用LINQ创建我的where子句,如下所示:

var query = from x in context.Xs select x; if (y == ...) { query = query.Where(x => xY == 1); } 

我有很多这些“if …. where”的陈述。 我遇到的问题是,所有这些都加入了使用AND的子句,但我需要所有where子句使用OR。 有没有一种简单的方法将此代码移植到OR代码中? 或者甚至用OR做出最简单的方法是什么?

谢谢。

PredicateBuilder是您解决问题的完美解决方案。 它允许您继续将单个“AND”和“OR”语句一起添加。

你可以这样做:

 var query = from x in context.Xs where (xX == 1) || (xY == 2) || (xZ == "3") select x; 

我建议使用表达式树动态构建您的查询:

(MSDN)如何:使用表达式树构建动态查询

您还可以使用PredicateBuilder (在引擎盖下执行类似操作)动态构建谓词,然后将最终谓词传递给Where方法。