2017-08-25 132 views

回答

2

这在一般情况下是不可能的。下面是一个简单的例子来说明我的观点:

class Apple { 
    public int Weight {get;set;} 
} 
class Orange { 
    public int Diameter {get;set;} 
} 
Expression<Func<Apple,bool>> heavy = a => a.Weight > 250; 

即使你穿越的heavy表达式树,你将无法在AppleWeight转化为相关的Orange什么。

仅在表达式中应用Apple的调用方法会出现类似的问题。

T1上的表达式仅限于T2上的成员的有限情况下,您可以使用ExpressionVisitor类进行转换。覆盖VisitMember,检查MemberExpression node的内容为T1,找到T2中的相应成员,并构造替换Expression。这可能是使用在DTO上构建的表达式来查询后端数据库的可行技巧。

相关问题