此问题在此处已有答案:
Combining two expressions (Expression<Func<T, bool>>)(10个答案)
昨天关门了。
社区正在审查是否从昨天开始重新讨论这个问题。
我有两份名单
List<Expression<Func<MyClass, bool>>> andConditions = new List<Expression<Func<MyClass, bool>>>();
List<Expression<Func<MyClass, bool>>> orConditions = new List<Expression<Func<MyClass, bool>>>();
第一个,我想在每个项目之间使用AND,第二个在每个项目之间使用OR。最后,我想用OR合并这两个列表。
结果示例:
exprList1 AND exprList1 OR exprList2 OR exprList2 OR exprList2
你能告诉我这件事吗?
1条答案
按热度按时间abithluo1#
您可以使用
PredicateBuilder
从LINQKit
nuget包。在所有促使你手动构建表达式树的因素中,动态 predicate 的需求在典型的业务应用程序中是最常见的。幸运的是,可以编写一组简单的、可重用的扩展方法,从根本上简化这项任务。这就是我们的PredicateBuilder类的作用。
首先安装nuget包:
之后你可以使用
PredicateBuilder
来合并表达式。长版本:基于LINQ的短版本:
PredicateBuilder.New<MyClass>(true)
返回一个初始 predicate ,该 predicate 返回true
。将 predicate 与AND操作组合是合适的行为,因为它将创建true && predicate_1 && ... && predicate_n
结果。PredicateBuilder.New<MyClass>(false)
适合于OR操作。如果你不能使用外部库,你可以自己实现合并表达式的方法:
并在代码中使用它: