排序动态列表不起作用

时间:2013-03-06 14:23:38

标签: c# asp.net linq

我有一个填充和排序的动态列表:

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);

当我在排序调用之前和之后检查调试模式时,列表根本没有排序,它是按顺序添加的。

当我运行它时,我看到没有任何东西被分类。可能有什么不对?

3 个答案:

答案 0 :(得分:2)

这是问题所在:

eventList.OrderBy(p => p.title);

您假设OrderBy对现有集合进行排序。它没有。它返回一个有序的序列。你忽略了那个返回值,所以这个语句没用。

你可能想要:

eventList = eventList.OrderBy(p => p.title).ToList();

这不仅仅是OrderBy - 所有 LINQ序列操作(SelectWhereJoin等)保留原文收集不变,并返回具有适当投影,过滤(等)数据的序列。

答案 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变量中。