我正在使用C#和LINQ,我的一些日期是以Date
类型存储的。
目前,我正在使用以下脚本按开始日期对列表进行排序,从早到晚。
但是使用以下代码后,我的事件没有被排序:
events.OrderBy(x => x.DateTimeStart).ToList();
return events.AsQueryable();
这里可能出了什么问题?
我正在使用C#和LINQ,我的一些日期是以Date
类型存储的。
目前,我正在使用以下脚本按开始日期对列表进行排序,从早到晚。
但是使用以下代码后,我的事件没有被排序:
events.OrderBy(x => x.DateTimeStart).ToList();
return events.AsQueryable();
events.OrderBy(x => x.DateTimeStart).ToList()
创建了一个新的列表,但你没有返回它。
你可能想要像这样:
return events.OrderBy(x => x.DateTimeStart).ToList();
events.OrderBy(x => x.DateTimeStart)
: 声明一个按照属性DateTimeStart排序事件的查询,但是此时不执行该查询。
events.OrderBy(x => x.DateTimeStart).ToList();
: 执行上述查询,遍历所有的events,检查它们的DateTimeStart并进行排序,将结果保存为List,然后......丢弃这个结果!因为你没有保存它。可以将其与以下内容进行比较:
int a = 0;
a + 1;
b = a; // b is 0
return events.OrderBy(e => e.Date).AsQueryable();
: 在这里,你返回了原始的events而没有排序。
你应该按照以下方式编写代码:
return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable();
return events.OrderBy(x => x.DateTimeStart).AsQueryable();
那个版本无法工作。它只是声明了一种方式来排序事件并将该方式作为IQueryable返回。如果您在未来的代码中使用返回值,即使在使用之前添加新事件,它也将始终包含所有已排序的事件。
将您订购的事件存储在一个变量中,并将此变量作为可查询对象返回;
var orderedEvents = events.OrderBy(x => x.DateTimeStart).ToList();
return orderedEvents.AsQueryable();
return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable();
return events.OrderBy(x => x.DateTimeStart).AsQueryable();
- publicgk
AsQueryable()
和ToList()
在底层数据结构不同时意义完全不同。 - flindeberg