2012-11-23 107 views
3

可能重复:
Combining two expressions (Expression<Func<T, bool>>)结合Func键<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 

这样我就可以通过这个给我方法。

+0

我忘了提及的东西:我有这些表达式中的N个(超过2个),我想把它们全部放在一起。 –

+0

看来[这个问题](http://stackoverflow.com/questions/457316/combining-two-expressions-expressionfunct-bool)这似乎包括你的问题... –

回答

6

您可以创建ExpressionVisitor来组合查询。检查此msdn博客的更多信息:Combining Predicates(答案3)。他谈论英孚,但你可以在你的案例中使用它

3

您可以使用expressions.Any(x => x.CallMethod)来实现此目标。

+0

我需要有选择地结合表达式,即我不希望始终在最终结果中包含所有表达式。就像'if(someCondition){result = result.OrElse(expressionN); }' –

+0

您需要基于某些业务规则/逻辑动态地准备这些表达式集合。但要使用Any扩展方法执行聚集的集合。 –

+0

我需要将结果作为Func >的实例。任何()将只返回一个布尔值。 –

相关问题