c# - 按多个属性和条件对对象列表进行排序和分组
问题描述
我有一个具有以下属性的对象列表:
日期(常规日期格式)
高优先级(布尔)
优先级(整数)
完成(布尔)
关闭(布尔)
我正在尝试使用 linq 将此列表排序为以下逻辑:
如果未完成则按优先级排序 如果未完成
则按优先级排序 如果未完成
则按无优先
级排序 如果已完成
则按优先级排序 如果已完成则按优先级
排序
我还需要按日期对每个分组进行排序。
这是我当前的 linq 查询:
Tasks.GroupBy(x => x.Date)
.Select(s =>
s.OrderByDescending(a => a.HighPriority)
.ThenBy(a => a.Priority)
.ThenBy(a => a.Closed))
.SelectMany(sa => sa)
.ToList();
如何更改查询以获取遵循我的逻辑的列表?
解决方案
Tasks
是类实例的集合。在该类中创建一个名为OrderPriority
.
public byte OrderPriority
{
get
{
if (HighPriority && !Completed)
return 1;
if (Priority && !Completed)
return 2;
// and so forth
}
}
然后您的 LINQ 可能如下所示:
Tasks.OrderBy(x => x.OrderPriority).ThenBy(x => x.Date).ToList();
推荐阅读
- python - 如何在张量流的自定义损失函数中使用训练模型?
- python - 错误:尝试发送电子邮件时,视图未返回 HttpResponse
- javascript - 是的验证:根据另一个字段值有条件地验证一个字段
- python - 如何将 Stringvar 转换为日期
- javascript - 有没有办法使用节点将较小的 PDF 文件插入到较大的 PDF 页面中?
- javascript - 将旋转元素的中心移动到光标
- javascript - useState 向对象添加属性只剩下最后一个属性
- gradle - 错误:尝试在 jitpack 上构建我的 gradle 项目时未找到构建工件
- java - 有什么方法可以根据我们的输入链接到该网站?
- laravel - 创建用户时,给role_id分配UUID