带有动态谓词的linq查询在由OR连接的where子句中

如果向当前查询添加更多限制,则可以在c#中轻松创建动态查询.

var list = new List<Item>();
var q = list.AsQueryable();
q = q.Where(x => x.Size == 3);
q = q.Where(x => x.Color == "blue");

在这种情况下,添加每个新谓词与前一个执行AND操作.以前的结果相当于:

q = list.Where(x => x.Size == 3 && x.Color == "blue");

是否可以使用OR而不是AND来实现相同的结果?

q = list.Where(x => x.Size == 3 || x.Color == "blue");

我们的想法是使用OR运算符连接可变数量的表达式.

预期结果需要写入一些与以下伪代码类似的内容:

var conditions = new List<Func<Item, bool>>();

然后迭代条件来构建类似的东西:

foreach(var condition in conditions)
    finalExpression += finalExpression || condition;

最佳答案 感谢RaphaëlAlthaus给出了以下链接:

http://www.albahari.com/nutshell/predicatebuilder.aspx

谓词构建器是解决方案.您可以使用它从Nuget安装LinqKit.在该URL中,您还可以找到此类的实现.

注意:为了使其与LinqToSql或LinqToEntities一起使用,必须使用“AsExpandable()”方法转换IQueriable对象,对于内存对象,它不是必需的

点赞