2011-10-02 75 views
5

我有一個謂語Expression<Func<T1, bool>>LINQ的 - 從表達式創建表達式<T1><T2>

我需要使用的T2T1財產,我試圖想約幾個approches,可能使用Expression.Invoke但couln用它作謂語Expression<Func<T2, bool>>;不要讓我的頭靠近它。

參考:

class T2 { 
    public T1 T1; 
} 

而且

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

非常感謝提前。

回答

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

這是知府,謝謝! – Variant

相關問題