创建一个正确的表达式

时间:2016-01-27 16:14:50

标签: c# .net

我有一个N System.Linq.Expressions.Expression的序列,我想将其转换为N-Nary表达式,它使用运算符N-1次将我的所有表达式连接成一个。

因此,对于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 个答案:

答案 0 :(得分:2)

您所描述的是 reduce 函数,在LINQ中称为Aggregate。它将一系列值减少为单个值,如下所示:

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

如何合并acccurrent取决于您。

答案 1 :(得分:0)

框架中没有任何实现,你必须使用BinaryExpressions并在循环中连接它们。