LINQ依次排序

时间:2019-07-08 13:22:22

标签: c# sql linq

我的代码:

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

approver = guid approver2 = guidmodifieddate = datetime

如果我的列表项中有任何一个具有审批者或approver2值(不为null),则它必须位于我的列表顶部。 如果没有任何项目具有批准者或批准者2的价值,则应按其修改日期列出(最早的是最早的)。

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

谢谢。

编辑:我仍尝试OrderByDesc仍看不到

  

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

在我页面的顶部底部上。它们没有组合在一起

1 个答案:

答案 0 :(得分:1)

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

  1. false < true起,您可能要使用.OrderByDescending(...)而不是.OrderBy()
  2. 由于Guidstruct,所以不可能 null(但可以与null进行比较以返回true
  3. 您可能希望放置同时具有 ApproverApprover2的项目,然后放置具有批准者的项目,然后具有没有

代码(假设ApproverApprover2的类型为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();