Сортировка списка так, чтобы определенное значение оказалось сверху - PullRequest
11 голосов
/ 08 декабря 2011

У меня есть класс Offer, который содержит поданную категорию.

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

Я пробовал это, но безрезультатно, что бы вы порекомендовали?

Offers = Offers.OrderBy(x => x.Category == "Corporate").ToList();

Ответы [ 2 ]

27 голосов
/ 09 декабря 2011

При заказе по логическому значению false (0) предшествует true (1).Чтобы сначала получить элементы, которые соответствуют предикату, необходимо изменить порядок сортировки с помощью OrderByDescending:

Offers = Offers.OrderByDescending(x => x.Category == "Corporate").ToList();
14 голосов
/ 09 декабря 2011

В спецификации языка C # 5.0 не указано байтовое представление для значений true и false. Следовательно, лучше не полагаться на предположение, что true представлено 1. Кроме того, результат сортировки по логическому выражению x.Category == "Corporate" не очевиден, поскольку true также может быть представлено отрицательным значением. Поэтому я использую троичный оператор, чтобы явно указать значение сортировки:

Offers = Offers
    .OrderBy(x => x.Category == "Corporate" ? 0 : 1)
    .ThenBy(x => x.Category)
    .ThenBy(x => x.Date) // or what ever
    .ToList(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...