Упорядочение и подупорядочение списка с использованием лямбды - PullRequest
3 голосов
/ 19 сентября 2011

Мне нужно упорядочить список по статусу == «Отклонено» и дате по возрастанию, а затем по статусу == «Принят» и дате по убыванию.

Я пытаюсь сделать следующее, но я не уверен, какчтобы пойти по этому поводу:

items
   .OrderBy(x => x.status == "Rejected") 
   .ThenBy(x => x.DateSubmitted)
   .ThenBy(x => x.status == "Accepted") 
   .ThenByDescending(x => x.DateSubmitted)

1 Ответ

3 голосов
/ 19 сентября 2011

Вы описываете задачу немного неловко, что (я думаю) приводит вас к немного неправильной реализации.

Я говорю:

items
   .Where(x => x.status == "Rejected") 
   .OrderBy(x => x.DateSubmitted)
   .Concat(items.
       .Where(x => x.status == "Accepted") 
       .OrderByDescending(x => x.DateSubmitted));

Основное отличие состоит в том, что теперь статус, отличный от «Отклонено» или «Принят», не отображается Тем не менее, я думаю, что это то, что вы хотели. Если вы хотите полный набор, рассмотрите возможность использования

items
   .Where(x => x.status == "Rejected") 
   .OrderBy(x => x.DateSubmitted)
   .Concat(items.
       .Where(x => x.status != "Rejected") 
       .OrderByDescending(x => x.DateSubmitted));

PS. Это также предполагает Linq-To-Objects. Я не очень хорошо разбираюсь в Linq-to-EF или Linq-to-SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...