我试图按一列上的null值对查询进行排序,然后按this帖子中的另一列对查询进行排序。
_ctx.Leads.Include(a => a.LeadAttachments)
.Where(s => s.Name.ToLower().StartsWith(filter))
.OrderBy(a=>a.AcceptedOn.HasValue)
.ThenByDescending(a => a.AssignedOn)
.Skip(offSet)
.Take(12)
.ToList()
添加
.OrderBy(a=>a.AcceptedOn.HasValue)
时出现此错误EntityFramework.Core.dll中发生类型为'System.Data.SqlClient.SqlException'的异常,但未在用户代码中处理
附加信息:关键字“ IS”附近的语法不正确。
FETCH语句中选项NEXT的无效用法。
我的两个按列排序都是
Nullable<DateTime>
类型。此查询有什么问题?有更好的分类方法吗?
更新:
感谢@vamsi的回答,我没有这个错误。现在,我需要将其排序如下:
具有
null
的AcceptedOn
值的所有记录都应放在第一位具有两个日期值的所有记录应按
AssignedOn
而不是AcceptedOn
排序这可能吗?
最佳答案
来自评论:
但是我真正想要的是首先全部为null acceptOn,然后其余部分按AssignedOn排序。那可能吗
_ctx.Leads.Include(a => a.LeadAttachments)
.Where(s => s.Name.ToLower().StartsWith(filter))
.OrderByDescending(a=> a.AcceptedOn == null
? DateTime.MaxValue
: a.AssignedOn == null
? a.AcceptedOn
: a.AssignedOn)
.Skip(offSet)
.Take(12)
.ToList();
代码中的排序优先级说明
具有
null
值的AcceptedOn
值的记录显示在顶部同时具有
AcceptedOn
和AssignedOn
值的记录将按AssignedOn
降序排列仅具有
AcceptedOn
值的剩余记录将以降序排列