如何在实体框架中混合使用值和null来执行特定顺序

本文关键字:null 执行 定顺序 实体 框架 混合 | 更新日期: 2023-09-27 17:58:42

我使用的是Entity Framework,我使用Skip和Take返回一个减少的集合,但基于订单使用可为null的日期列。我想按以下顺序订购这份清单:

  • 日期小于今天
  • 今天的日期
  • 无效日期
  • 未来的日期

如何在1 DB查询中做到这一点?

using (var context = new CustomersDbContext())
{
    var customers = context.Customers.OrderBy(c => c.NextContactDate).Skip(10).Take(10);
}

如何在实体框架中混合使用值和null来执行特定顺序

您可以先根据规则定义的"优先级"进行排序,然后(仅适用于同等优先级)使用以下当前标准:

var customers = context.Customers
    .OrderBy(c => c.NextContractDate == null ? 2:
        c.NextContactDate < DateTime.Today ? 0 :
        c.NextContactDate > DateTime.Today ? 3 : 1)
    .ThenBy(c => c.NextContractDate)
    .Skip(10).Take(10);