如果您声明它,则可以创建表达式树.
但是有可能为普通的代码块(如方法或属性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生成那样正常内省?
最佳答案 不,不可能 – 普通代码是字节码,没有机制将其转换为表达式树.你可以做的是使用反射 – 但基本上就是这样.