我有一个对象列表,想要通过某些属性来订购它们
List<Foo> foo = GetList();
return foo.OrderBy(foo => foo.DisplayOrder);
问题是当DisplayOrder
为零时,我需要将该项放在 last 位置。
我的问题与make zero appear last in a list of ascending numbers相同,但在C#中。这很容易解决,但我希望看到一些创造性的,简洁的答案。
答案 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);