按降序排列DateTime值列表,包括时间

时间:2015-01-26 15:35:58

标签: c# linq sorting datetime

我有一份文件清单。每个文档都有一个 LastModifiedAt 可空DateTime属性。现在我想要一个排序列表,其中包含最新的文档。 E.g。

  

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));

但是我来了

  

无法将类型'void'隐式转换为'System.Collections.Generic.List'

我做错了什么?

2 个答案:

答案 0 :(得分:5)

为什么按Date的{​​{1}}属性排序?使用......

DateTime

请注意,我已使用documentList = documentList // you need to re-assign it to the list as Rawling has already mentioned .OrderByDescending(d => d.LastModifiedAt ?? DateTime.MinValue) .ToList(); 运算符将空值替换为??,否则如果您尝试使用{{1}的DateTime.MinValue属性,则会出现异常}}

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

Value

答案 1 :(得分:4)

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

您需要执行类似

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

但是,您拨打Sort的电话已经确定 - 我无法理解为什么您会收到您报告的错误。

编辑:正如阿列克谢所指出的那样,调用documentList = documentList.Sort(...)可能会产生错误,这使得你似乎不可能 调用{{1} }}