我有一份文件清单。每个文档都有一个 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'
我做错了什么?
答案 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} }}