我使用的是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);