C# 排序动态列表不工作

C# 排序动态列表不工作,c#,asp.net,linq,C#,Asp.net,Linq,我有一个填充和排序的动态列表: List<dynamic> eventList = new List<object>(); foreach (Task t in tasks) { eventList.Add( new { id = "t" + t.TaskID.ToString(),

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

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);
List eventList=new List();
foreach(任务中的任务t)
{
事件列表。添加(
新的
{
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.tasksdescription,
全天=假,
resource=t.Schedule.EmployeID.ToString(),
color=ColorConversion.HexConverter(System.Drawing.color.FromArgb(t.Project.color.Value))
}
);
}
foreach(案例中的案例c)
{
事件列表。添加(
新的
{
id=“c”+c.CaseID.ToString(),
title=c.casettitle+“-”+c.Customer.CustomerDescription,
start=ResolveStartDate(StartDate(c.Schedule.DateFrom.Value)),
end=ResolveEndDate(StartDate(c.Schedule.DateFrom.Value)、c.Schedule.Hours.Value),
描述=c.案例描述,
全天=假,
resource=c.Schedule.EmployeID.ToString(),
color=ColorConversion.HexConverter(System.Drawing.color.FromArgb(c.color.Value))
}
);
}
eventList.OrderBy(p=>p.title);
在sort调用之前和之后,当我在调试模式中检查时,列表根本没有排序,而是按照添加的顺序排序


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

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


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

这就是问题所在:

eventList.OrderBy(p => p.title);
您假设,
OrderBy
对现有集合进行排序。没有。它返回一个有序的序列。您忽略了该返回值,因此该语句是无用的

您可能想要:

eventList = eventList.OrderBy(p => p.title).ToList();
不仅仅是
OrderBy
是这样工作的-所有LINQ序列操作(
Select
Where
Join
等)都保持原始集合不变,并返回带有适当投影、过滤(etc)数据的序列。

这就是问题所在:

eventList.OrderBy(p => p.title);
您假设,
OrderBy
对现有集合进行排序。没有。它返回一个有序的序列。您忽略了该返回值,因此该语句是无用的

您可能想要:

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

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

下面这行只是一个查询:

eventList.OrderBy(p => p.title);
这意味着,它类似于类,结构语句。它只声明一些结构,不做更多的事情。为了恢复该查询,必须将其复制到数组或列表中,如下所示:

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

之后,eventList将被迭代,元素将被写入数组并存储在SorterDarray变量中。

下面这行只是一个查询:

eventList.OrderBy(p => p.title);
这意味着,它类似于类,结构语句。它只声明一些结构,不做更多的事情。为了恢复该查询,必须将其复制到数组或列表中,如下所示:

var sortedArray = eventList.OrderBy(p => p.title).ToArray();
之后,eventList将被迭代,元素将被写入数组并存储在SorterDarray变量中