今天,当我使用 Linq + lambda 对列表进行排序时,发生了一些奇怪的事情。我有一个列表,其中包含在字段 c => c.Statistics.Created 上应按 OrderedByDescending 排序的文章。该字段作为日期时间返回。我执行以下操作:
newsItems = newsItems.OrderByDescending(c => c.Statistics.Created).ToArray<Item>();
我知道这个列表将按降序排列,并且这个日期的时间也被监视,因为这只是一个 DateTime 对象。现在奇怪的部分。我将代码调整为如下所示:
newsItems = newsItems.OrderByDescending(c => c.Statistics.Created.Date).ToArray<Item>();
现在,当我查看列表时,这些项目仍然按照应有的方式排序。当我告诉 Linq 只查看日期时,我不明白为什么列表仍然以正确的方式排序。不知何故,Linq 决定也看看时间。当我将我的应用程序附加到 w3p 进程并观察会发生什么时,我看到 Date 对象上的 Time 实际上是空的,就像我期望的那样。当我告诉 linq 只查看日期时,有人可以解释一下这个列表实际上是如何按时排序的吗?
已经解决了!
我已经找到了导致这种奇怪行为发生的原因。这是该列表(从 CMS 中获取)已经以某种方式排序。然后,当我按日期(没有时间)排序时,订单显然是正确的,Linq 在这个日期没有做任何其他事情。