c# – 普通代码的表达式树

如果您声明它,则可以创建表达式树.

但是有可能为普通的代码块(如方法或属性getter)获取表达式树吗?

我要做的是,假设订单处理系统,我有一个订单项类:

class Item : Entity
{
    [Cascade]
    public Document document { get; set; }
    public int line { get; set; }

    public Product product { get; set; }
    public string description { get; set; }
    public decimal qty { get; set; }
    public decimal price { get; set; }
    public decimal net
    {
        get
        {
            return qty * price;
        }
    }
    public VatCode vat_code { get; set; }
}

其中净值等于qty * price,所以我想用属性或方法声明它,然后让框架内省该表达式,以便它可以生成适当的SQL来定义一个相应的计算列.相应的数据库视图

最明显的方法是获取属性getter或方法的表达式树,但我找不到任何指示如何执行此操作,或者它是可能的. (我已经找到了一种将方法体作为字节流的方法,但这不是这里所希望的.)

如果那是不可能的,我认为建议的解决方案是声明类似于表达式树的静态字段,并在运行时编译/运行它以供内部使用,并且还像SQL生成那样正常内省?

最佳答案 不,不可能 – 普通代码是字节码,没有机制将其转换为表达式树.你可以做的是使用反射 – 但基本上就是这样.

点赞