我有一个谓词Expression<Func<T1, bool>>
我需要使用Expression<Func<T2, bool>>
作为谓词T1
使用T2
Expression.Invoke
属性我试图考虑几个approches,可能使用class T2 {
public T1 T1;
}
但是couln; t抓住它。
供参考:
Expression<Func<T1, bool>> ConvertPredicates(Expression<Func<T2, bool>> predicate) {
//what to do here...
}
和
{{1}}
提前多多感谢。
答案 0 :(得分:7)
在考虑表达式树之前,尝试使用普通的lambda找到解决方案。
你有一个谓词
Func<T1, bool> p1
并想要一个谓词
Func<T2, bool> p2 = (x => p1(x.T1));
您可以将其构建为表达式树,如下所示:
Expression<Func<T2, bool>> Convert(Expression<Func<T1, bool>> predicate)
{
var x = Expression.Parameter(typeof(T2), "x");
return Expression.Lambda<Func<T2, bool>>(
Expression.Invoke(predicate, Expression.PropertyOrField(x, "T1")), x);
}