c# - 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 结果
在我页面的顶部或底部..他们没有组合在一起
解决方案
没有测试数据来确定错误,需要一个水晶球。您在这里可能有几个问题:
- 因为
false < true
您可能想使用.OrderByDescending(...)
而不是.OrderBy()
- 因为
Guid
isstruct
它不能null
(但可以与null
to return比较true
) - 您可能希望将两者都 放在顶部的项目上
Approver
,Approver2
然后是具有单个批准者的项目,然后是没有批准者的项目。
代码(假设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();
推荐阅读
- mysql - 在不选择表的情况下填充mysql中的行数的方法
- arrays - 在反应中将类添加到数组的一个元素
- microsoft-graph-api - 如何使用 microsoft graph API 从事件中获取正确的与会者响应状态?
- stored-procedures - 创建存储过程时如何解决无效列名错误?
- c# - 反序列化返回特定字段为 JObject 或 JArray 的 JSON
- ios - 在 iOS 13 中使状态栏不透明并着色
- python - 使用 QuerySet 在 Django 模型中计算属性
- java - Java 8 过滤但返回所有对象
- r - 带 ggplot 的线图(分类 x 轴)
- sql - Access Sum 函数产生错误的结果