簡體   English   中英

LINQ:從按內部列表分組的列表中獲取總和

[英]LINQ: Get sum from a list grouped by an inside list

有類似的問題,但我找不到解決方案。 我有一個非常簡單的對象定義。 我需要一個查詢,返回按Tag分組的金額總和。

預期產量:

TagName         Sum
--------------------
Entertainment  70.00
Car            20.00
Travel         24.65

帳戶類別:

public string AccountName {get;set;}
public List<Transaction> Transactions {get;set;}

示例帳戶 :我的錢包

交易類別:

public decimal Amount {get;set;}
public List<Tag> Tags{get;set;}

交易示例10 , [Entertainment, Travel, Car]

標簽類別

public string Title {get;set;}

樣本標簽Entertainment, Travel, Car, Food, Beverage

我希望這很清楚。 我不能使用LINQ做到這一點。 我需要幫助

將每個事務投影到{ Amount, Title }對象的序列中。 然后按標簽對這些對象進行分組,並計算每組的金額總和:

account.Transactions
       .SelectMany(t => t.Tags.Select(tag => new { t.Amount, tag.Title }))
       .GroupBy(tagAmount => tagAmount.Title)
       .Select(g => new {
          TagName = g.Key,
          Sum = g.Sum(tagAmount => tagAmount.Amount)
       });

注意:此解決方案假定您在事務中沒有重復的標簽。 否則,您應該在投影標簽集合之后添加Distinct()調用。


與查詢語法相同:

var query = from t in account.Transactions
            from tag in t.Tags
            select new { t.Amount, tag.Title } into tagAmount
            group tagAmount by tagAmount.Title into g
            select new
            {
                TagName = g.Key,
                Sum = g.Sum(tagAmount => tagAmount.Amount)
            };

暫無
暫無

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

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