簡體   English   中英

如何根據 C# 中列表中的列表值對列表進行排序?

[英]How to Sort a List based on the value of a list within the list in C#?

可能這個問題有點令人困惑,但基本上我有一個列表,其中包含另一個列表。 像這樣:

public class Transaction
{
    public string TransactionType { get; set; }
    public List<TransactionDetails> Details { get; set; } = new List<TransactionDetails>();
}

public class TransactionDetails
{
    public string TransactionDate { get; set; }
    public double TransactionAmount { get; set; }
    public double TransactionBalance { get; set; }
}

現在,我想根據TransactionDetails 列表中的 TransactionDate 對 Transaction列表進行排序。 如果假設我只想根據TransactionType對其進行排序,我知道這是這樣做的方法:(假設我已經添加了列表)

    List<Transaction> listTransactions;
    List<Transaction> sortedListTransactions;

    sortedListTransactions = listTransactions
        .OrderBy(x => x.TransactionType)
        .ToList();

我試過了,這很有效。 但是,當我對我的案例應用基本相同的方法時,即基於TransactionDate對列表進行排序時,它並沒有給我所需的答案。 請讓我知道是否有任何方法可以實現這一目標..

如果您必須對列表進行排序,則必須選擇一個定義順序的元素(如值、日期等)。如果您喜歡用於排序的屬性也是列表,則必須選擇一個元素從該內部列表(例如 min、max、first、last)或將所有內部列表值(如 sum、average、median、concat)聚合為一個值。

在您的情況下,一種方法可能是在內部列表中找到最小元素,並將其用作對外部元素進行排序的標准。 這可能是這樣的:

var sortedTransactions = transactions
        .OrderBy(transaction => transaction.Details
                                    .OrderBy(detail => detail.TransactionDate)
                                    .FirstOrDefault())
        .ToList();

從您的示例中,從內部列表中對外部元素進行排序的另一種可能性是獲取所有交易金額的總和,如下所示:

var sortedTransactions = transactions
        .OrderBy(transaction => transaction.Details
                                    .Sum(detail => detail.TransactionAmount))
        .ToList();

盡管如此,您可以定義每個級別的排序標准,然后讓它冒泡以返回排序標准。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM