创建一个 n 个表达式

本文关键字:表达式 一个 创建 | 更新日期: 2023-09-27 18:32:19

我有一个 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来做?

创建一个 n 个表达式

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

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

如何将acccurrent结合起来取决于您。

框架中没有实现任何内容,您必须使用二进制表达式并在循环中连接它们。