我有一个对象列表,每个对象都有类型字段中的时间数据,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
答案 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);