2010-07-08 23 views
1

嘿,我試圖根據用戶點擊的內容對列的自定義數據網格進行排序。變量「sort」被傳遞給控制器​​,但只是一個字符串,表示要對哪個列進行排序。C#MVC:Func <Table1,「runtime type」>如何獲得動態類型?

我需要在LambdaExpression使用該列的類型...繼承人的代碼

ParameterExpression param = Expression.Parameter(typeof(Table1), "x"); 
MemberExpression memberExp = Expression.Property(param, sort);  
var lambdaExp = Expression.Lambda<Func<Table1, int>>(memberExp, new ParameterExpression[] { param }); 

if (bool.Parse(Session["sort"].ToString())) 
    sortedKeys = keys.OrderBy(lambdaExp).Skip((currentPage - 1) * _pageSize).Take(_pageSize); 
else 
    sortedKeys = keys.OrderByDescending(lambdaExp).Skip((currentPage - 1) * _pageSize).Take(_pageSize); 

正如你可以在第3行看到我通過委託Func鍵從工作了具有int類型的列,但會根據點擊的列動態更改。

我該如何解決這個問題?

謝謝!

回答

0

我假設你有方便的列類型,這將是一個System.Type。我們稱之爲「columnType」。所以你想要做的是使用非通用的Lambda方法:

Type funcType = typeof(Func<,>).MakeGenericType(typeof(Table1), columnType); 
Expression.Lambda(funcType, memberExp, new ParameterExpression[] { param }); 
相關問題