Linq OrderByDescending但首先保持零值

时间:2011-03-17 13:59:12

标签: linq

我有一个整数集合,我想按降序排序,除了在列表中保留0值作为第一个。

例如: 0,1,2,3,4,5,6,7,8

应该导致: 0,8,7,6,5,4,3,2,1

谢谢!

1 个答案:

答案 0 :(得分:8)

var input = new [] {0,1,2,3,4,5,6,7,8};

两种与负数和正数一起使用的排序:

var result = input.OrderBy(i => i == 0? 0 : 1).ThenByDescending(i => i);

或者如果您的所有数字都是非负数:

var result = input.OrderByDescending(i => i == 0? int.MaxValue : i);

或者一些非常奇怪的解决方案,如果你有负数和正数,但你不想排序两次(正如我在第一个解决方案中所做的那样):

var result = input
              .GroupBy(i => i == 0 ? 0 : 1)
              .OrderBy(g => g.Key)
              .Select(g => g.Key == 0 ? g : g.OrderByDescending(i => i)
              .SelectMany(g => g);