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

 皇家冷情绪 发布于 2023-02-04 16:52

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

预期产出:

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

帐户类:

public string AccountName {get;set;}
public List Transactions {get;set;}

样本帐户:我的钱包

交易类:

public decimal Amount {get;set;}
public List Tags{get;set;}

样本交易:10 , [Entertainment, Travel, Car]

标签类

public string Title {get;set;}

样本标签:Entertainment, Travel, Car, Food, Beverage

我希望它很清楚.我无法使用LINQ.我需要帮助

1 个回答
  • 将每个事务计划为{ 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)
                };
    

    2023-02-04 16:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有