[英]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.