如何在Linq订购日期?

Gib*_*boK 6 c# linq entity-framework

我正在使用C#和LINQ,我有类型的日期 Date

目前我正在使用此脚本按开始日期,从早期到最晚来订购列表.

使用以下代码,我的事件未排序:

      events.OrderBy(x => x.DateTimeStart).ToList();    
      return events.AsQueryable();
Run Code Online (Sandbox Code Playgroud)

这可能有什么问题?

slo*_*oth 12

events.OrderBy(x => x.DateTimeStart).ToList() 创建一个新列表,但不返回它.

你可能想要这样的东西

return events.OrderBy(x => x.DateTimeStart).ToList(); 
Run Code Online (Sandbox Code Playgroud)


Rys*_*gan 4

events.OrderBy(x => x.DateTimeStart):声明一个按属性DateTimeStart对事件进行排序的查询。查询尚未执行。

events.OrderBy(x => x.DateTimeStart).ToList();:处理上一个查询。迭代所有事件,检查它们的DateTimeStart,对它们进行排序并将安全结果作为列表,然后...丢弃结果!因为你没有保护好它。与类似的东西进行比较:

int a = 0;
a + 1;
b = a; // b is 0
Run Code Online (Sandbox Code Playgroud)

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

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

return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable();
Run Code Online (Sandbox Code Playgroud)

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

第二个解决方案是:

return events.OrderBy(x => x.DateTimeStart).AsQueryable();
Run Code Online (Sandbox Code Playgroud)

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