我有一个填充和排序的动态列表:
List<dynamic> eventList = new List<object>();
foreach (Task t in tasks)
{
eventList.Add(
new
{
id = "t" + t.TaskID.ToString(),
title = t.TaskTitle,
start = ResolveStartDate(StartDate(t.Schedule.DateFrom.Value)),
end = ResolveEndDate(StartDate(t.Schedule.DateFrom.Value), t.Schedule.Hours.Value),
description = t.TaskDescription,
allDay = false,
resource = t.Schedule.EmployeID.ToString(),
color = ColorConversion.HexConverter(System.Drawing.Color.FromArgb(t.Project.Color.Value))
}
);
}
foreach (Case c in cases)
{
eventList.Add(
new
{
id = "c" + c.CaseID.ToString(),
title = c.CaseTitle + "-" + c.Customer.CustomerDescription,
start = ResolveStartDate(StartDate(c.Schedule.DateFrom.Value)),
end = ResolveEndDate(StartDate(c.Schedule.DateFrom.Value), c.Schedule.Hours.Value),
description = c.CaseDescription,
allDay = false,
resource = c.Schedule.EmployeID.ToString(),
color = ColorConversion.HexConverter(System.Drawing.Color.FromArgb(c.Color.Value))
}
);
}
eventList.OrderBy(p => p.title);
当我在排序调用之前和之后检查调试模式时,列表根本没有排序,它是按顺序添加的。
当我运行它时,我看到没有任何东西被分类。可能有什么不对?
答案 0 :(得分:2)
这是问题所在:
eventList.OrderBy(p => p.title);
您假设OrderBy
对现有集合进行排序。它没有。它返回一个有序的序列。你忽略了那个返回值,所以这个语句没用。
你可能想要:
eventList = eventList.OrderBy(p => p.title).ToList();
这不仅仅是OrderBy
- 所有 LINQ序列操作(Select
,Where
,Join
等)保留原文收集不变,并返回具有适当投影,过滤(等)数据的序列。
答案 1 :(得分:1)
OrderBy
不会更改原始列表。它只是创建一个新元素,与第一个元素具有相同的元素,但顺序不同。
试试
eventList = eventList.OrderBy(p => p.title).ToList();
答案 2 :(得分:0)
以下行只是一个查询:
eventList.OrderBy(p => p.title);
这意味着,它类似于类,结构语句。它只声明一些结构而不做其他任何事情。要 instatiate 该查询,您必须将其复制到数组或列表,如下所示:
var sortedArray = eventList.OrderBy(p => p.title).ToArray();
之后,将迭代eventList,并将元素写入数组并存储在sortedArray变量中。