2017-02-26 30 views
0

我有通用類「MSAccessQueryBuilder」下面的方法基於Newexpression

public I_QueryBuilder<T> Select(Expression<Func<T, object>> fieldNames) 
    { 
     NewExpression nEx = (NewExpression)fieldNames.Body; 
     MsAccessQueryBuilder<"Anonymous Type Of Expression"> x = new MsAccessQueryBuilder<"Anonymous Type Of Expression">(); 

    } 

我需要用一個泛型類型創建「MSAccessQueryBuilder」的實例方法中的匿名類型返回泛型類的實例這是在lambda表達式中匿名創建的。

的方法將被稱爲像下面

x.Select(s=> new {p1 = s.user_id,p2 = s.user_name}) 

試圖8小時我自己沒有運氣。

是這可能擺脫NewExpression或LambdaExpression匿名類型和創建通用類,匿名類型的實例

請幫

謝謝

+0

你能不能給我們什麼是真正的行爲的一些信息?編譯器錯誤或運行時錯誤?還是它沒有按預期工作? – Psi

+0

其實我不知道如何使用匿名類型創建泛型類以及如何從變量「nEx」獲取類型 – Vijayakumar

回答

0

不得不改變方法簽名Func鍵委託返回類型爲通用的,而不是對象解決了這個問題

public I_QueryBuilder<TResult> Select(Expression<Func<T, TResult>> fieldNames) 
{ 

    return new MsAccessQueryBuilder<TResult>(); 

} 
0

你可以這樣做。

var genericType = typeof(MsAccessQueryBuilder<>); 
var specificType = genericType.MakeGenericType(typeof(nEx)); 
var x = Activator.CreateInstance(specificType); 
+0

嗨,我需要基於lambda表達式傳遞的匿名對象創建泛型類的實例( lambda表達式的主體總是一種「newexpression」),而不是表達式本身 – Vijayakumar