组合 Func<bool> 表达式[重复]
Posted
技术标签:
【中文标题】组合 Func<bool> 表达式[重复]【英文标题】:Combining Func<bool> expressions [duplicate] 【发布时间】:2012-11-11 22:55:22 【问题描述】:可能重复:Combining two expressions (Expression<Func<T, bool>>)
我有一个方法接受一个 Expression<Func<bool>>
参数
void MethodOne(Expression<Func<bool>> expression)
我有多个Expression<Func<bool>>
实例。如何使用Expression.OrElse
将这些表达式动态组合成一个Expression<Func<bool>>
(即构建表达式树)?
例如,如果我有两个表达式,例如
() => objectA.PropertyOneIsSet
和
() => objectB.PropertyTwoIsSet
我希望最终结果是:
() => objectA.PropertyOneIsSet || objectB.PropertyTwoIsSet
所以我可以将它传递给我上面的方法。
【问题讨论】:
查看this question,这似乎包含您的问题... 有件事我忘了说:我有 N 个这样的表达式(超过 2 个),我想 OrElse 全部。 【参考方案1】:您可以创建 ExpressionVisitor 来组合查询。查看此 msdn 博客以获取更多信息:Combining Predicates(答案 3)。他在谈论 EF,但你可以在你的情况下使用它
【讨论】:
【参考方案2】:您可以使用表达式.Any(x => x.CallMethod) 来实现此目标。
【讨论】:
我需要有选择地组合表达式,即我不想总是在最终结果中包含所有表达式。类似if(someCondition) result = result.OrElse(expressionN);
您需要根据一些业务规则/逻辑动态地准备这个表达式集合。但要使用 Any 扩展方法执行聚合集合。
我需要将结果作为 Func以上是关于组合 Func<bool> 表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章
将 List<Expression<Func<T, bool>>> 组合到 OR 子句 LINQ [重复]