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
是如何应用的。我收回我的评论。:)