Pat*_*oco 6 linq lambda expression
如果向当前查询添加更多限制,则可以在 c# 中轻松创建动态查询。
var list = new List<Item>();
var q = list.AsQueryable();
q = q.Where(x => x.Size == 3);
q = q.Where(x => x.Color == "blue");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,每个新谓词都被添加,并与前一个谓词执行 AND 运算。之前的结果等价于:
q = list.Where(x => x.Size == 3 && x.Color == "blue");
Run Code Online (Sandbox Code Playgroud)
是否有可能达到相同的结果但使用 OR 而不是 AND ?
q = list.Where(x => x.Size == 3 || x.Color == "blue");
Run Code Online (Sandbox Code Playgroud)
这个想法是有可变数量的表达式与 OR 运算符连接。
预期的结果需要以类似于以下伪代码的方式编写:
var conditions = new List<Func<Item, bool>>();
Run Code Online (Sandbox Code Playgroud)
然后迭代条件来构建类似的东西:
foreach(var condition in conditions)
finalExpression += finalExpression || condition;
Run Code Online (Sandbox Code Playgroud)
感谢 Rapha\xc3\xabl Althaus 提供了以下链接:
\n\nhttp://www.albahari.com/nutshell/predicatebuilder.aspx
\n\n谓词构建器就是解决方案。您可以使用它从 Nuget 安装 LinqKit。在该 url 中您还可以找到此类的实现。
\n\n注意:为了使此功能与 LinqToSql 或 LinqToEntities 一起使用,必须使用“AsExpandable()”方法转换 IQueriable 对象,对于内存对象则不需要
\n 归档时间: |
|
查看次数: |
4620 次 |
最近记录: |