2016-01-27 39 views
2

我有一個N System.Linq.Expressions.Expression的序列,我想將它轉換成一個N-Nary表達式,它將我的所有表達式連接成一個N-1次運算符。創建一個n-nary表達式

因此,對於4個表達式的集合{e1, e2, e3, e4}和運營商AND我會得到:e1 AND e2 AND e3 AND e4

由於操作是一樣的,我可以通過簡單地鏈接在一起,N-1 BinaryExpressions

Expression result = (((e1 AND e2) AND e3) AND e4); 

但我想有可能是這樣做的一個簡單的方法創建一個表達式。基本上像

Expression.NNary(ExpressionType operator, IEnumerable<Expression> expressions) 

有沒有這樣的事情已經落實或做我有BinaryExpressions辦呢?

回答

2

你所描述的是reduce函數,在LINQ中被稱爲Aggregate。它減少值序列爲單個值,像這樣:

int[] numbers = { 1, 2, 3, 4 }; 
int sum = numbers.Aggregate((acc, current) => acc + current, 0); // 10 

你如何結合acccurrent是你。

+0

但是,這怎麼可以用來組合表達式?這就是問題所在。 –

+0

這只是用BinaryExpressions做的簡短/ linq方式,而不是循環收集並手動完成。 – Adrian

0

框架中沒有任何實現,您必須使用BinaryExpressions並將它們連接在一個循環中。