如何将null排序为第一项?

时间:2015-10-13 21:50:59

标签: c# linq collections

我有一个Person Class,它有一个Jobs列表

 public class Person
 {
      public List<Job> Jobs;
 }

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

我想在Person类上创建一个名为 CurrentOrLastJob()的方法

  1. 返回没有enddate的工作
  2. 如果所有作业都有结束日期,则会返回最近的结束日期。
  3. DateTime上的正确&#34; OrderByDescending()方法是什么?键入以使空项首先显示(默认情况下,它似乎显示在最后)

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

2 个答案:

答案 0 :(得分:3)

我会使用null coalescing运算符为日期提供一个默认值,为您提供所需的值。

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

这会将任何空值视为最大日期/时间值,因此当按降序排序时,它将首先出现。

答案 1 :(得分:1)

我会分两步完成 - 首先是EndDate是否有值(将作业没有结束日期放在首位),然后是EndDate值本身。

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

这样,您无需担心订购时nulltruefalse值会下降的位置。