LINQ:从内部列表分组的列表中获取总和

时间:2014-01-10 12:22:39

标签: c# linq

有类似的问题,但我找不到解决方案。我有一个非常简单的对象定义。我需要一个返回按标签分组的金额总和的查询。

预期产出:

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 制作它。我需要帮助

1 个答案:

答案 0 :(得分:5)

将每个事务计划为{ 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)
            };
相关问题