使零出现在排序的整数列表中的最后

时间:2011-11-16 22:38:42

标签: c# .net linq sorting sql-order-by

我有一个对象列表,想要通过某些属性来订购它们

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

问题是当DisplayOrder为零时,我需要将该项放在 last 位置。

我的问题与make zero appear last in a list of ascending numbers相同,但在C#中。这很容易解决,但我希望看到一些创造性的,简洁的答案。

2 个答案:

答案 0 :(得分:28)

您可以使用可以按布尔值排序的事实。如果您首先按DisplayOrder == 0订购,则所有零值都会true,所有其他值都会false。由于true将在false后排序,所有零值都将在最后:

return foo.OrderBy(x => x.DisplayOrder == 0)
          .ThenBy(x => x.DisplayOrder);

答案 1 :(得分:0)

怎么样

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