按包括时间在内的降序对 DateTime 值列表进行排序

Sort list of DateTime values in descending order including time

我有一份文件清单。每个文档都有一个 LastModifiedAt 可为 null DateTime 属性。现在我想要一个排序列表,其中有最新的文档。例如

2015-01-26 08:00
2015-01-26 07:00
2014-12-12 08:00

一个简单的 OrderByDescending 不适合我。带有 2015-01-26 07:00 的文档在列表的顶部,而它应该在第二个位置。然后我试了这个:

documentList.OrderByDescending(d => d.LastModifiedAt.Value.Date).ThenByDescending(d => d.LastModifiedAt.Value.TimeOfDay).ToList();

我得到的结果是时间排序错误。另外我试过

documentList.Sort ((x, y) => y.LastModifiedAt.Value.CompareTo (x.LastModifiedAt.Value));

但我得到了

Cannot implicitly convert type 'void' to 'System.Collections.Generic.List'

我做错了什么?

为什么要按 DateTimeDate 属性 排序?使用 ...

documentList = documentList // you need to re-assign it to the list as Rawling has already mentioned
    .OrderByDescending(d => d.LastModifiedAt ?? DateTime.MinValue)
    .ToList();

请注意,我使用 ?? 运算符将空值替换为 DateTime.MinValue,否则如果您尝试使用 Value 属性 的 DateTime?.

如果你想对原始列表进行排序或者不想使用LINQ:

documentList.Sort((doc1, doc2) => (doc2.LastModifiedAt ?? DateTime.MinValue).CompareTo(doc1.LastModifiedAt ?? DateTime.MinValue));

我预计问题是您在列表中调用 OrderByDescending 但随后 没有将结果存储在任何地方 - 它没有对原始列表进行排序,它创建一个新的有序序列。

你需要做类似的事情

documentList = documentList.OrderByDescending(d => d.LastModifiedAt.Value).ToList();

但是,您对 Sort 的调用是正确的 - 我不明白为什么您会收到您报告的错误。

编辑:正如 Alexei 指出的那样,错误很可能来自调用 documentList = documentList.Sort(...),这使得您似乎不太可能 而不是 调用 documentList = documentList.OrderByDescending(...)....