如果您向当前查询添加更多限制,您可以轻松地在 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;