繁体   English   中英

如何转换表达式 <Func<T1, bool> &gt;表达 <Func<T2, bool> &gt;

[英]How to convert Expression<Func<T1, bool>> to Expression<Func<T2, bool>>

我需要转换表达式

来自: Expression<Func<T1, bool>>

到: Expression<Func<T2, bool>>

由于T1T2可以不同,所以我知道需要重新创建该表达式。 我希望有一个小的方法可以重用于多个对象。

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

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

即使遍历“ heavy的表达树,也无法将“ Apple Weight ”转换为与“ Orange相关的任何东西。

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

在有限的情况下,当T1上的表达式仅限于T2可用的成员时,您可以使用ExpressionVisitor类进行转换。 覆盖VisitMember ,检查T1 MemberExpression node的内容,在T2找到一个对应的成员,并构造替换的Expression 对于使用在DTO上构造的表达式查询后端DB而言,这可能是一个可行的技巧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM