簡體   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