我有一个对象集合,我希望按DateTime属性排序?
list.OrderBy(r => r.Milestone)
里程碑是:
public DateTime? Milestone { get; set; }
它似乎将所有带有novalue的项目放在排序的顶部。无论如何都要按日期排序,但将空项放在列表的底部。 (我当然不关心空的排序)
所以,如果我有4个项目:
我想订购清单1,2,4,3
答案 0 :(得分:7)
一个简单的选择:
list.OrderBy(r => r.Milestone ?? DateTime.MaxValue)
当 值为DateTime.MaxValue
的里程碑时,这将无法正常工作。
最近有一个相关的问题,关于实现IComparer<T>
最后放置空值,但我现在找不到它......上面肯定是最简单的解决方案,如果你不使用其他任何内容MaxValue
。
可替换地:
list.OrderBy(r => !r.Milestone.HasValue)
.ThenBy(r => r.Milestone)
将命令做的所有值首先具有里程碑,然后排序不具有里程碑的值。这样,即使某些里程碑使用DateTime.MaxValue
,它也会起作用。这对我的眼睛来说有点模糊,但你可能更喜欢它。
答案 1 :(得分:1)
试试这个:
list.OrderBy(r => r.Milestone.GetValueOrDefault(DateTime.Maxvalue))