2010-07-05 12 views
0

我有一个对象集合,我期待通过属性是一个DateTime进行排序?按日期顺序收集某些项目没有值的日期

list.OrderBy(r => r.Milestone) 

其中的里程碑是:

public DateTime? Milestone { get; set; } 

似乎把所有与NOVALUE的项目在排序的顶部。无论如何按日期排序,但将空的项目放在列表的底部。 (我不关心当然是空的的顺序)

所以,如果我有4个项目:

  1. 1/1/2001
  2. 1/1/2002
  3. [无日期时间]
  4. 1/1/2004

我想订购清单1,2,4,3

回答

7

一个简单的选择:

list.OrderBy(r => r.Milestone ?? DateTime.MaxValue) 

如果有值与DateTime.MaxValue一个mileston,当然这不会很好地工作。

最近有一个相关的问题,关于实施IComparer<T>最终将空值,但我现在找不到它......上述绝对是最简单的解决方案,但如果你不会使用任何东西MaxValue其他。

或者:

list.OrderBy(r => !r.Milestone.HasValue) 
    .ThenBy(r => r.Milestone) 

将责令首先有一个里程碑的所有值,然后这不是没有兴趣。这样,即使某些里程碑使用DateTime.MaxValue,它也可以工作。这对我的眼睛来说有些模糊,但你可能更喜欢它。

1

试试这个:

list.OrderBy(r => r.Milestone.GetValueOrDefault(DateTime.Maxvalue)) 
相关问题