2015-10-13 17 views
0

我有一個Person類,它有)工作如何將null作爲第一項進行排序?

的列表
public class Person 
{ 
     public List<Job> Jobs; 
} 

public class Job 
{ 
    public string Name; 
    public DateTime StartDate; 
    public DateTime? EndDate; 
} 

我想創建一個名爲CurrentOrLastJob(Person類的方法這將

  1. 回報的工作沒有enddate
  2. 如果所有作業都有結束日期,則會返回最近的結束日期。

什麼是一個DateTime的權利「OrderByDescending()方法?類型,以便空項目第一顯示出來(因爲默認情況下它似乎顯示了最後一個)

public Job CurrentOrLastJob() 
{ 
    var lastJob = Jobs.OrderByDescending(r=>r.EndDate).FirstorDefault(); 
    return lastJob; 
} 
+3

有了這個令人印象深刻的徽章數量,我很驚訝,看到你沒有在這個問題的標題上工作太多。你可以從它刪除標籤(C#)並重新引用它,因此它涉及到主題(將'null'排序爲第一項)? – quetzalcoatl

回答

3

我將使用空合併運算符爲提供所需值的日期提供默認值。

Jobs.OrderByDescending(r => r.EndDate ?? DateTime.MaxValue) 

這將把任何空值視爲最大日期/時間值,所以當按降序排序時,它將首先出現。

1

我會做在兩個步驟 - 首先通過與否EndDate有一個值(將工作沒有結束日期開始),然後EndDate值本身

Jobs.OrderBy(j => j.EndDate.HasValue ? 1 : 0) 
    .ThenByDescending(j => j.EndDate) 
    .FirstOrDefault(); 

這樣,你就不必擔心在那裏null,truefalse值在訂購時下降。

+1

問題是現在6個月的時候,當有人看着它,並且必須破譯它所要做的事情。我更喜歡清晰簡潔的代碼來縮小或微調性能。 –

+0

我完全同意這就是爲什麼我建議。抽象/人工標準上的兩階段排序實際上比簡單替換/合併更復雜。但是,哦,有人已經將該片段添加爲另一個答案。我稍後會清除評論。 – quetzalcoatl

相關問題