2016-01-27 44 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并将它们连接在一个循环中。