2015-01-04 128 views
0

我有以下自定義擴展方法,它允許您動態指定哪個字段將被排序 - 它用於綁定到一個JQuery數據表。修改擴展方法以允許ThenBy

public static IQueryable<T> OrderByField<T>(this IQueryable<T> q, string SortField, string SortDirection) 
{ 

    var param = Expression.Parameter(typeof(T), "p"); 
    var prop = Expression.Property(param, SortField); 
    var exp = Expression.Lambda(prop, param); 

    var method = SortDirection == "asc" ? "OrderBy" : "OrderByDescending"; 

    var types = new Type[] { q.ElementType, exp.Body.Type }; 
    var mce = Expression.Call(typeof(Queryable), method, types, q.Expression, exp); 

    return q.Provider.CreateQuery<T>(mce); 

} 

然後它被調用如下:.OrderByField("ColumnName", "asc")其中兩個params是字符串。

我希望修改這個函數以允許「thenby」被立即調用,但是我不確定如何做到這一點。

任何幫助非常感謝。

+1

您應該對'SortDirection'使用一個枚舉。 – SLaks

+0

這些值直接從AJAX請求填充。 MVC能綁定到枚舉嗎? –

+0

確保也查看最近的重複答案。 –

回答

0

您可以直接撥打OrderBy()OrderByDescending()(不通過CreateQuery()),然後返回IOrderedQueryable<T>

+0

儘管如此,你將如何去做,OrderBy沒有覆蓋,允許您將字段名稱作爲字符串傳遞。 –

+0

@GavinCoates:您需要將它傳遞給'Expression >'。您可能需要反射來統一調用它。 – SLaks

+0

你能演示如何做到這一點? –