如何在林克订购椰枣

本文关键字:林克 | 更新日期: 2023-09-27 18:00:44

我使用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();:处理上一个查询。遍历所有事件,检查它们的DateTimeStart、将它们和安全结果排序为列表然后。。。放弃结果!因为你没有保护它。把它和类似的东西比较一下:

int a = 0;
a + 1;
b = a; // b is 0

return events.AsQueryable();:在这里,您返回的是原始事件,而不是排序的。

您应该按照以下方式编写代码:

return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable();

该版本将创建已排序事件的静态列表。如果现在更改事件列表,结果将不会考虑您的更改。

第二种解决方案是:

return events.OrderBy(x => x.DateTimeStart).AsQueryable();

那个版本不会起作用。它只是声明一种对事件进行排序的方式,并将该方式返回为IQueryable。如果您在未来的代码中使用返回值,它将始终包含所有排序的事件,即使您在使用之前添加了新的事件。

将您的订单事件存储在一个变量中,并将该变量作为Queryable()返回;

var orderedEvents = events.OrderBy(x => x.DateTimeStart).ToList();    
return orderedEvents.AsQueryable();

或者,如果您不需要该变量,则直接返回已排序的事件。

return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable();