C#表达式树简单算法

C#表达式树简单算法,c#,linq,dynamic,expression,C#,Linq,Dynamic,Expression,我一直在试图找出如何通过表达式类实现一些简单的数学 我想做的是 (1 + 10 * 15) 当我尝试通过Expression.Add和Expression.Constant执行此操作时,我得到的结果是 ((1 + 10) * 15) 这是不正确的,因为它首先计算1+10,而不是10*15 有没有一种方法可以组合Expression.Add/Multiply等。。没有创建括号?我想有,但我就是找不到在哪里,怎么找 我的测试代码如下 var v1 = Expression.Con

我一直在试图找出如何通过表达式类实现一些简单的数学

我想做的是

(1 + 10 * 15)
当我尝试通过Expression.Add和Expression.Constant执行此操作时,我得到的结果是

((1 + 10) * 15)
这是不正确的,因为它首先计算1+10,而不是10*15

有没有一种方法可以组合Expression.Add/Multiply等。。没有创建括号?我想有,但我就是找不到在哪里,怎么找

我的测试代码如下

        var v1 = Expression.Constant(1, typeof(int));
        var v2 = Expression.Constant(10, typeof(int));
        var v3 = Expression.Constant(15, typeof(int));

        var a1 = Expression.Add(v1, v2);
        var m2 = Expression.Multiply(a1, v3);
谢谢你抽出时间


理查德。

你必须先做乘法运算:

Expression.Add(v1, Expression.Multiply(v2, v3))
而不是

    var a1 = Expression.Add(v1, v2);
    var m2 = Expression.Multiply(a1, v3);
试试这个

    var a1 = Expression.Multiply(v2, v3);
    var m2 = Expression.Add(v1, a1);

这里有一个更大的例子:
它使用参数、常量和二进制表达式。

我以前尝试过这个方法,是的,它确实像预期的那样工作,但因为这是更大范围的一部分,所以分析和构建部分的顺序是加号优先。所以我必须按照BODMAS的顺序来排列各个部分,才能正确地构建表达式?
var a1 = Expression.Multiply(v2, v3)
var m2 = Expression.Add(a1, v1)