如何将null作为第一项排序

本文关键字:一项 排序 null | 更新日期: 2023-09-27 18:17:45

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

 public class Person
 {
      public List<Job> Jobs;
 }
 public class Job
 {
     public string Name;
     public DateTime StartDate;
     public DateTime? EndDate;
 }

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

  1. 返回一个没有结束日期的作业
  2. 如果所有作业都有结束日期,则返回最近的结束日期。

什么是正确的" orderbydescent()方法上的日期时间?键入使空项首先显示(默认情况下它似乎最后显示)

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

如何将null作为第一项排序

我将使用空合并运算符为日期提供一个默认值,该值可以提供您想要的值。

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

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

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

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

这样,您就不必担心排序时null, truefalse的值落在哪里。