【发布时间】:2013-09-03 16:08:49
【问题描述】:
如果您向当前查询添加更多限制,您可以轻松地在 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;
【问题讨论】:
-
您使用 AsQueryable 有什么原因吗? (它在答案方面有所不同,有点......)
-
是的,我最终需要使用查询访问数据库,因此它应该由数据库提供商正确翻译。虽然,我对 IEnumerable 的解决方案很感兴趣
-
看看 PredicateBuilder :albahari.com/nutshell/predicatebuilder.aspx
标签: linq lambda expression