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变量中