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



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

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

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

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

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

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);

相关内容

  • 没有找到相关文章

最新更新