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

C# 使零在已排序的整数列表中最后出现,c#,.net,linq,sorting,sql-order-by,C#,.net,Linq,Sorting,Sql Order By,我有一个对象列表,想按属性对它们进行排序 List<Foo> foo = GetList(); return foo.OrderBy(foo => foo.DisplayOrder); List foo=GetList(); 返回foo.OrderBy(foo=>foo.DisplayOrder); 问题是,当DisplayOrder为零时,我需要将该项放在最后一个位置 我的问题与C#中的问题相同。这很容易解决,但我想看到一些有创意、简洁的答案。您可以使用这样一个事

我有一个对象列表,想按属性对它们进行排序

List<Foo> foo = GetList();    
return foo.OrderBy(foo => foo.DisplayOrder);
List foo=GetList();
返回foo.OrderBy(foo=>foo.DisplayOrder);
问题是,当
DisplayOrder
为零时,我需要将该项放在最后一个位置


我的问题与C#中的问题相同。这很容易解决,但我想看到一些有创意、简洁的答案。

您可以使用这样一个事实,即您可以按布尔值排序。如果您第一次按
DisplayOrder==0
排序,则所有零值的排序结果为
true
,所有其他值的排序结果为
false
。由于
true
将在
false
之后排序,因此所有零值都将位于末尾:

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

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

这不是倒退吗?最后,按
DisplayOrder
排序只会将0放回顶部,不是吗?@djacobson:No-
0==0
将计算为
true
,这将在最后一次计算
false
值end@djacobson不,“假”在“真”之前变为“假”。+1右。我误解了
ThenBy
是如何应用的。我收回我的评论。:)