0

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

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

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

当我运行它时,我也没有看到任何排序。有什么问题?

4

3 回答 3

2

这就是问题:

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

您假设OrderBy对现有集合进行排序。它没有。它返回一个有序的序列。您忽略了该返回值,因此该语句是无用的。

你可能想要:

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

它不仅仅是OrderBy像这样工作的 -所有LINQ 序列操作(Select,WhereJoin)都保持原始集合不变,并返回一个带有适当投影、过滤(等)数据的序列。

于 2013-03-06T14:26:08.380 回答
1

OrderBy不会更改原始列表。它只是创建一个新的,具有与第一个相同的元素,但顺序不同。尝试

eventList = eventList.OrderBy(p => p.title).ToList();
于 2013-03-06T14:26:00.460 回答
0

下面的行只是一个查询:

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

这意味着,它类似于类,结构语句。它只声明了一些结构,什么也不做。为了使该查询实例化,您必须将其复制到数组或列表中,如下所示:

var sortedArray = eventList.OrderBy(p => p.title).ToArray();

之后,将遍历 eventList 并将元素写入数组并存储在 sortedArray 变量中。

于 2013-03-06T14:27:46.257 回答