2010-09-23 144 views
2

我想將排序字段和方向動態地傳遞給LINQ to SQL代碼。但我找不到像那樣執行的方式,因爲如果我不能寫 users.OrderBy(d =>Field);LINQ to SQL動態排序

有沒有辦法通過動態字段進行排序?謝謝。

private static IQueryable<user> GetUserData(String Field, String Direction) 
{ 
    UserDataContext dc = new UserDataContext(); 

    var users = from d 
        in dc.users 
       orderby Field ascending 
       select d; 

    if (Direction == "ascending") 
    { 
     return users.OrderBy(d => d.userName); 
    } 
    else 
    { 
     return users.OrderByDescending(d => d.userName); 
    } 
} 

回答

1

Queryable.OrderBy擴展方法需要Expression<Func<TSource, TKey>>類型的參數。這不必使用lambda表達式創建,但可以通過Expression類手動構建,它可讓您在代碼中動態構建任何類型的表達式。這可以用來創建一個動態的OrderBy方法。

我還在最近的一個問題中讀到了關於LINQ Dynamic Query Library的問題,這個問題似乎有一個方法可以完全實現。它顯然包含在VS2008的一些示例集合中的代碼示例中,請閱讀鏈接以獲取更多信息。