按排序顺序排序,大于0

时间:2012-02-07 13:32:57

标签: linq c#-3.0

我正在尝试对一堆具有排序顺序的对象进行排序,但是有些字段已经初始化为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的用户,然后是那些排序顺序

的用户

3 个答案:

答案 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();