组合Func<bool>表达式

6

可能是重复问题:
如何组合两个表达式(Expression<Func<T, bool>>)

我有一个方法,接受一个单一的Expression<Func<bool>>参数。

void MethodOne(Expression<Func<bool>> expression)

我有多个Expression<Func<bool>>实例。如何使用Expression.OrElse动态地将这些表达式组合成单个Expression<Func<bool>>(即构建表达式树)?例如,如果我有两个表达式:
() => objectA.PropertyOneIsSet

"and"。
() => objectB.PropertyTwoIsSet

我希望最终结果是:

() => objectA.PropertyOneIsSet || objectB.PropertyTwoIsSet

所以我可以将这个传递给上面的方法。


请见这个问题,它似乎包含了你的问题… - Samuel Caillerie
有一件事我忘了提:我有N个这样的表达式(超过2个),我想将它们全部 OrElse。 - alex.tashev
2个回答

8
你可以创建ExpressionVisitor来组合查询。查看这篇msdn博客获取更多信息:组合谓词(第三个答案)。他谈到了EF,但你可以在你的情况下使用它。

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

我需要有选择地组合表达式,即我不想总是在最终结果中包含所有表达式。类似于 if(someCondition) { result = result.OrElse(expressionN); } - alex.tashev
你需要根据某些业务规则/逻辑动态准备这个表达式集合。但是要使用 Any 扩展方法执行聚合的集合。 - Damyan Bogoev
我需要结果是 Func<Expression<bool>> 的实例。Any() 只会返回一个 bool。 - alex.tashev
2
那么你需要像这样的东西: http://www.albahari.com/nutshell/predicatebuilder.aspx - Damyan Bogoev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接