2010-07-05 45 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))