2012-11-23 50 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 >的實例。任何()將只返回一個布爾值。 –

相關問題