首页 > 解决方案 > 按多个属性和条件对对象列表进行排序和分组

问题描述

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

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

我正在尝试使用 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();

如何更改查询以获取遵循我的逻辑的列表?

标签: c#linqsql-order-by

解决方案


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();

推荐阅读