2015-03-13 105 views
1

我有一個字符串,它包含用linq排序的列名稱, 當string只包含一列時工作正常,但當包含多列時,我不知道如何創建linq語句對它們進行分類。linq的多個orderby字符串列表

我的字符串是這樣的: 「ClassNo ASC,算上DESC,地板ASC」 我嘗試整理如下圖所示,如果一列:

switch (sort.Trim()) 
      { 
       default: 
        result = result.OrderBy(u => u.ClassId); 
        break; 
       case "ClassNo DESC": 
        result = result.OrderByDescending(u => u.ClassNo); 
        break; 
       case "ClassNo ASC": 
        result = result.OrderBy(u => u.ClassNo); 
        break; 
       case "count DESC": 
        result = result.OrderByDescending(u => u.count); 
        break; 
       case "count ASC": 
        result = result.OrderBy(u => u.count); 
        break; 
       case "floor DESC": 
        result = result.OrderByDescending(u => u.floor); 
        break; 
       case "floor ASC": 
        result = result.OrderBy(u => u.floor); 
        break; 
       case "ClassId DESC": 
        result = result.OrderByDescending(u => u.ClassId); 
        break; 
      } 

回答

1

你可以做這樣的事情:

var ordered1 = result.OrderBy(x => x.count); 
var ordered2 = ordered1.ThenBy(x => x.floor); 
var ordered3 = ordered2.ThenByDescending(x => x.ClassId); 

需要注意的是,OrderBy()OrderByDescending()會返回一個IOrderedEnumerable<T>,然後您可以添加另一級別的排序。

你的情況

所以,這將是這樣的:

// convert to an IOrderedEnumerable<T> 
var orderedResult = result.OrderBy(x => 1); 

foreach (string part in sort.Split(',')) 
{ 
    switch (part.Trim()) 
    { 
     case "ClassNo DESC": 
      orderedResult = orderedResult.ThenByDescending(u => u.ClassNo); 
      break; 
     case "ClassNo ASC": 
      orderedResult = orderedResult.ThenBy(u => u.ClassNo); 
      break; 
     case "count DESC": 
      orderedResult = orderedResult.ThenByDescending(u => u.count); 
      break; 
     case "count ASC": 
      orderedResult = orderedResult.ThenBy(u => u.count); 
      break; 
     case "floor DESC": 
      orderedResult = orderedResult.ThenByDescending(u => u.floor); 
      break; 
     case "floor ASC": 
      orderedResult = orderedResult.ThenBy(u => u.floor); 
      break; 
     case "ClassId DESC": 
      orderedResult = orderedResult.ThenByDescending(u => u.ClassId); 
      break; 
     default: 
      orderedResult = orderedResult.ThenBy(u => u.ClassId); 
      break; 
    } 
} 
+0

有時我的字符串,如 「ClassNo ASC,算上DESC,地板ASC」 和 「ClassNo ASC,算上DESC」 和 「ClassNo ASC」 和等等... ==>排序字符串是可變的 – jiji2663 2015-03-13 17:11:03

+0

明白了......請看我的更新。 – dana 2015-03-13 17:17:51