我正在尝试对一堆具有排序顺序的对象进行排序,但是有些字段已经初始化为0,所以我想首先显示所有用户/对象 排序订单(以实际正确的顺序)然后显示其他人,例如
我的清单
{id:4,name:"Tom", sortoder:0}
{id:14,name:"Bee", sortoder:0}
{id:401,name:"Mike", sortoder:1}
{id:13582,name:"Monty", sortoder:2}
{id:55,name:"Charlie", sortoder:0}
{id:9,name:"Khan", sortoder:9}
var fields = GetFields(myobject) //get fields (not really relevant)
.OrderBy(x => x.sortoder > 0) //this is where I am stuck on
.ToList();
我的列表都是在顶部排名为0的用户,然后是那些排序顺序
的用户答案 0 :(得分:8)
使用ThenBy
在第一个之后应用第二个排序:
var fields = GetFields(myobject)
.OrderByDescending(x => x.SortOrder > 0)
.ThenBy(x => x.SortOrder)
.ToList();
或者您可以使用条件表达式将值0替换为int.MaxValue
(假设int.MaxValue不作为合法的SortOrder出现):
var fields = GetFields(myobject)
.OrderBy(x => x.SortOrder == 0 ? int.MaxValue : x.SortOrder)
.ToList();
答案 1 :(得分:4)
怎么样:
.OrderBy(x => x.sortorder != 0 ? x.sortoder : int.MaxValue)
这基本上意味着“将0视为一个特殊值,相当于int.MaxValue
- 但只是使用现有的排序顺序”。
马克的第一次排序的方法是“有一个排序顺序而没有一个排序顺序”然后按排序顺序值(显然第二组显然是0)也可以正常工作 - 它实际上只是一个您使用的个人偏好问题。
答案 2 :(得分:0)
您可以实现IComparer或使用如下快速和脏的方式:
var fields = GetFields(myobject) //get fields (not really relevant)
.OrderBy(x => (x.sortoder == 0) ? int.MaxValue : x.sortoder) //this is where I am stuck on
.ToList();