2011-10-02 18 views
5
私は述語を持っています Expression<Func<T1, bool>>

Linq - 式<T1>を式<T2>から作成する

T2T1プロパティを使って述語Expression<Func<T2, bool>>として使用する必要があります。おそらくExpression.Invokeを使用していくつかのアキュレートについて考えようとしていましたが、couln;

参考:

class T2 { 
    public T1 T1; 
} 

そして

Expression<Func<T1, bool>> ConvertPredicates(Expression<Func<T2, bool>> predicate) { 
    //what to do here... 
} 

あらかじめお寄せいただきありがとうございます。

答えて

7

式ツリーについて考える前に、通常のラムダで解を見つけようとします。

あなたは述語

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); 
} 
+0

これは知事、感謝です! – Variant

関連する問題