我有一个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
吗?
答案 0 :(得分:2)
您所描述的是 reduce 函数,在LINQ中称为Aggregate
。它将一系列值减少为单个值,如下所示:
int[] numbers = { 1, 2, 3, 4 };
int sum = numbers.Aggregate((acc, current) => acc + current, 0); // 10
如何合并acc
和current
取决于您。
答案 1 :(得分:0)
框架中没有任何实现,你必须使用BinaryExpressions并在循环中连接它们。