按包括时间在内的降序对 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'
我做错了什么?
为什么要按 DateTime
的 Date
属性 排序?使用 ...
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(...)...
.
我有一份文件清单。每个文档都有一个 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'
我做错了什么?
为什么要按 DateTime
的 Date
属性 排序?使用 ...
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(...)...
.