繁体   English   中英

按多个属性和条件对对象列表进行排序和分组

[英]Sort and group a list of objects by multiple properties and conditions

我有一个具有以下属性的对象列表:

日期(常规日期格式)
高优先级(布尔)
优先级(整数)
已完成(布尔值)
关闭(布尔值)

我正在尝试使用 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是 class 实例的集合。 在 class 中创建一个名为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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM