2015-03-13 3 views
1

У меня есть строка, которая содержит имя столбца для сортировки с linq, , она отлично работает, когда строка содержит только один столбец, но когда она содержит несколько столбцов, я не знаю, как я могу создать инструкцию linq для их сортировки.Несколько столбцов orderby строки linq

моя строка, как это: "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

+0

Получил это ... Пожалуйста, просмотрите мои обновления. – dana

Смежные вопросы