Сделать ноль последним в отсортированном списке целых чисел - PullRequest
7 голосов
/ 17 ноября 2011

У меня есть список объектов и я хочу упорядочить их по некоторому свойству

List<Foo> foo = GetList();    
return foo.OrderBy(foo => foo.DisplayOrder);

Проблема в том, что когда DisplayOrder равно нулю, мне нужно поместить этот элемент в последнюю позицию.

Мой вопрос такой же, как и , чтобы ноль появился последним в списке возрастающих чисел , но в C #. Это легко решить, но я хочу увидеть несколько креативных и кратких ответов.

Ответы [ 2 ]

28 голосов
/ 17 ноября 2011

Вы можете использовать тот факт, что вы можете заказать по логическому значению.Если вы сначала упорядочите по DisplayOrder == 0, это приведет к true для всех нулевых значений и false для всех остальных значений.Поскольку true будет заказан после false, все нулевые значения будут находиться в самом конце:

return foo.OrderBy(x => x.DisplayOrder == 0)
          .ThenBy(x => x.DisplayOrder);
0 голосов
/ 17 ноября 2011

Как насчет

return foo.OrderBy(foo => foo.DisplayOrder == 0 ? int32.MaxValue : foo.DisplayOrder); 
...