如果向当前查询添加更多限制,则可以在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对象,对于内存对象,它不是必需的