[英]How to convert Linq Expression<Func<object,object,bool>> to Expression<Func<T1,T2,bool>>
[英]How to convert Expression<Func<T1, bool>> to Expression<Func<T2, bool>>
我需要转换表达式
来自: Expression<Func<T1, bool>>
到: Expression<Func<T2, bool>>
由于T1
和T2
可以不同,所以我知道需要重新创建该表达式。 我希望有一个小的方法可以重用于多个对象。
在一般情况下这是不可能的。 这是一个简单的例子来说明我的观点:
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.