首页 > 解决方案 > LINQ order by 然后 by

问题描述

我的代码:

  var list3 = _ItemForCheckService
    .GetBy(x => x.Status != Status.Deleted)
    .OrderBy(x => x.Approver != null || x.Approver2 != null)
    .ThenBy(x => x.ModifiedDate)
    .ToList();

批准人=guid 批准人2=guid 修改日期=日期时间

如果我的任何列表项具有批准者或批准者 2 值(非空),它必须在我的列表顶部。如果没有任何项目具有批准者或批准者2 的值,则它们应按修改日期列出(最旧的在前)。

在我的代码中,它不起作用。

谢谢。

编辑:我试过OrderByDesc了我还是没有看到

分组批准人或批准人2 结果

在我页面的顶部底部..他们没有组合在一起

标签: c#sqllinq

解决方案


没有测试数据来确定错误,需要一个水晶球。您在这里可能有几个问题:

  1. 因为false < true您可能想使用.OrderByDescending(...)而不是.OrderBy()
  2. 因为Guidisstruct不能 null(但可以与nullto return比较true
  3. 您可能希望将两者都 放在顶部的项目上ApproverApprover2然后是具有单个批准者的项目,然后是没有批准者的项目。

代码(假设Approver以及Approver2类型Guid):

var list3 = _ItemForCheckService
   .GetBy(x => x.Status != Status.Deleted)
   .OrderByDescending(x => x.Approver != default(Guid) || x.Approver2 != default(Guid))
   .ThenBy(x => x.ModifiedDate)
   .ToList();

或者如果我们想实现点3.

var list3 = _ItemForCheckService
   .GetBy(x => x.Status != Status.Deleted)
   .OrderBy(x => (x.Approver != default(Guid) ? 0 : 1) + 
                 (x.Approver2 != default(Guid) ? 0 : 1))
   .ThenBy(x => x.ModifiedDate)
   .ToList();

推荐阅读