按类的字符串字段对列表进行排序

时间:2017-03-23 15:54:40

标签: c# list lambda

我有一个对象列表,每个对象都有类型字段中的时间数据,id号和字符串描述符。我希望使用某种字符串类型将所有值拉到列表的前面,同时保持这些列表元素的顺序相同,并且列表元素的其余部分的顺序相同,只是附加到那些列表元素的后面用我想要的字符串。

我在寻找类似的SE问题后尝试过,

list.OrderBy(x => x.type.Equals("Auto"));

没有任何效果,尽管我可以找到所有其他示例按数字而不是字符串排序。

列出对象类定义:

public class WorkLoad
{
    public long id;
    public DateTime timestamp;
    ...
    public String type;
}

...create various workload objects...
schedule.Add(taskX)

schedule.OrderBy(x => x.type.Equals("Manual"));
//has no effect currently

2 个答案:

答案 0 :(得分:2)

如果您已经有一个排序列表,我认为通过"有一种类型的自动或不是#34;在不丢失原始订单的情况下(并且不必再次诉诸)可能是这样的:

var result = list.Where(x => x.type.Equals("Auto"))
                 .Concat(list.Where(x => !x.type.Equals("Auto")))
                 .ToList();

更新

您评论说"其他所有内容都应该按时间排序",所以您可以这样做:

var result = list.OrderByDescending(x => x.type.Equals("Auto"))
                 .ThenBy(x => x.Time).ToList();

答案 1 :(得分:1)

您可以按顺序使用多个排序:

list.OrderBy(x => x.type == "Auto" ? 0 : 1).ThenBy(x => x.type);