Linq OrderByDescending但首先保持零值

Mik*_*ole 4 linq

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

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

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

谢谢!

Sno*_*ear 8

var input = new [] {0,1,2,3,4,5,6,7,8};
Run Code Online (Sandbox Code Playgroud)

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

var result = input.OrderBy(i => i == 0? 0 : 1).ThenByDescending(i => i);
Run Code Online (Sandbox Code Playgroud)

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

var result = input.OrderByDescending(i => i == 0? int.MaxValue : i);
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)