2015-06-24 2 views
2

Ниже приведен порядок данных, которые я получаю в объекте списка из другой службы.Как отсортировать список с помощью Linq?

Data in List

Как я могу сортировать порядок выше списка в указанном ниже порядке?

Уровень 0 Класс
Уровень 0 S-класса
Уровень 1 Класс
Уровень 1 S-класса
Уровень 2 Класс
Уровень 2 S-класса
Уровень 0 Урок
Уровень 0 S -Лессон
Уровень 1 Урок
Уровень 1 С-урок
Уровень 2 Урок
Уровень 2 S-Урок

До сих пор я пробовал, как показано ниже, но только для правильного заказа для ProgramId «E».

myList.OrderByDescending(x => x.ProgramId== "E") 
      .ThenBy(x => x.Level) 
      .ThenBy(x => x.Special = True) 
      .ThenBy(x => x.Special = False) 
      .ThenByDescending(x => x.ProgramId== "B") 
      .ThenBy(x => x.Level) 
      .ThenBy(x => x.Special = True) 
      .ThenBy(x => x.Special = False); 

Ниже сортировочный логика, что я пытаюсь применить:

  • Он должен быть отсортирован на основе ProgramId первого уровня с последующим и Последовал Special = фальшивой, а затем Special = True.
  • В программе ProgramId порядок сортировки должен быть «E», за которым следует «B».
  • в пределах уровня, порядок сортировки должен быть уровень 0 с последующим 1-го уровня с последующим 2-го уровня

Любая помощь предложение по этому вопросу будет оценен по достоинству!

+0

ли вы на самом деле знаете, как это отсортирован? Это не похоже на то, что вы указали. Он выглядит как «ProgramDescription», а затем «Level». –

+0

Спасибо, что спросили более подробно @CharlesMager, я описал логику сортировки в моем вопросе. – seUser

ответ

1

Это произведет заказ вы запросили:

myList = myList.OrderByDescending(x => x.ProgramId) 
    .ThenBy(x => x.Level) 
    .ThenBy(x => x.Special); 

Я понятия не имею, почему вы думаете, что не работает, но я сейчас проверил его и он работает именно к Вашей спецификации.

Here is a working example

+0

Да @musefan, не может пройти описание! – seUser

+0

@seUser: Так что используйте мой первый, он правильно сортирует булевы. 'ThenBy' будет сортировать false сначала, что вы хотите, не используйте нисходящий – musefan

+0

Да, но он работает только для programid 'E', а не для 'B' – seUser

3

попробовать это?

myList.OrderByDescending(x => x.ProgramId) 
       .ThenBy(x => x.Level) 
       .ThenByDescending(x => x.Special) 
+1

Довольно уверен, что булевы упорядочивают 'false, true', а не наоборот. Интересно, кто это поддержал ... – musefan

+0

Спасибо David & musefan, на самом деле я хочу показать неспециалист, поэтому предложение Дэвида должно работать, однако у меня есть более двух ProgramId, чем то, что я показал в образце данных. Таким образом, с логикой выше сортировки я получаю правильный порядок для ProgramId «E» после этого, я получаю только порядок по уровню, не уверен, почему, как показано ниже: Уровень 0 Класс, Уровень 0 S-класс, Уровень 1 Класс , Уровень 1 S-класс, Уровень 2 класса, 2-го уровня S-класс, Уровень 0 урока, Уровень 1 Урок, Уровень 2 урока, Уровень 1 S-урок, Уровень 0 S-урок, Уровень 2 S-Lesson – seUser

+0

@seUser: Если у вас есть больше программных идентификаторов, тогда отредактируйте свои вопросы и включите их все, это очень важно для решения – musefan

-1
.OrderBy(x => x.Level).ThenBy(x => x.ProgramDescription) 
+0

Вы получите: '0 класс, 0 урок, 0 s-класс, 0 s-урок, ...' – musefan

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