我试图按一列上的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的回答,我没有这个错误。现在,我需要将其排序如下:
具有nullAcceptedOn值的所有记录都应放在第一位
具有两个日期值的所有记录应按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值的记录显示在顶部
同时具有AcceptedOnAssignedOn值的记录将按AssignedOn降序排列
仅具有AcceptedOn值的剩余记录将以降序排列

07-26 04:42