2014-03-28 31 views
1

我有一個C#MVC項目。我想在客戶端應用程序控制器方法中構建語句以從web.api中獲取JSON,以便在視圖模板中進行分頁/排序。排序順序是否可以作爲變量傳遞給此代碼?用於排序順序的lambda - 可以使用變量嗎?

var container = new CourseService.Container(uri); 
var query = container.Courses.OrderByDescending(c => c.Name).Skip(skip).Take(take).ToList(); 
+0

不,你不能,你需要做的是這樣的:[http://stackoverflow.com/questions/3078465/want-a-query-to-使階由可變式-LINQ查詢] [1] [1]:http://stackoverflow.com/questions/3078465/want-a-query-to-make-order -by-variable-in-linq-query –

+0

謝謝Chris。這麼想......但想要檢查 – Steve

回答

1

爲什麼不添加自己的IEnumerable擴展做到這一點?

public enum SortOrder 
{ 
    Ascending, 
    Descending 
} 

public static class EnumerableExtensions 
{ 
    public static IEnumerable<T> OrderBy<T, TKey>(this IEnumerable<T> input, 
     Func<T, TKey> keySelector, SortOrder order) 
    { 
     switch(order) 
     { 
      case SortOrder.Descending: 
       return input.OrderByDescending(keySelector); 
      default: 
       return input.OrderBy(keySelector); 
     } 
    } 
} 

然後:

var output = container.Courses.OrderBy(c => c.Name, SortOrder.Descending); 
+0

螞蟻感謝您的代碼。我是C#新手。我的控制器方法和變量參數在下面的代碼中。我如何實現你的代碼?公共類HomeController:控制器 public ViewResult Index(string sortOrder) { – Steve

+0

如果您將'EnumerableExtensions'類和'SortOrder'枚舉到代碼庫的某處,那麼您可以像上面演示的那樣調用它。如果你想使用字符串,你可以調整這個方法來取代一個字符串而不是'SortOrder',但是由於你失去了編譯時檢查(即你必須確保你每次都得到正確的字符串),這種方法不夠健壯。更好的辦法是改變你的控制器動作,使它看起來像:'public ViewResult Index(SortOrder sortOrder)'。 –

相關問題