2015-03-13 99 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