c# - 在添加总计时使用 Linq 对重复项进行分组
问题描述
我有这个应用程序,我正在尝试添加功能。该函数返回一个列表。
编辑: 功能是整理整个公司每个年级组的所有成本。然而,结果显示了每个公司等级组的成本。这意味着有重复的 GradeGroupCodes,因为这些等级组属于不同的子公司。我想把所有这些结果汇总起来,然后将所有子公司的总数汇总在一个年级组内。
即镁 1,000
镁 500
镁 1,500
我要
镁 3,000
我正在尝试使用 Linq 查询将重复的“GradeGroupCodes”总数加在一起。
return summaryResults.GroupBy(name => name.GradeGroupCode).Select(item => item.First()).ToList();
我.Select(.First())
试图让它返回一个列表而不是一个 IGrouping<>。
我知道它不起作用,因为它只是返回具有重复 GradeGroupCode 的第一个项目,但是我一直在摆弄这个超过 3 个小时,似乎无法弄清楚如何让 Duplicate GradeGroupCodes 折叠成彼此相加总和。
我想在 LINQ 中执行此操作,但如果不可能,我想我可以尝试不同的方式。
为清楚起见添加
摘要结果只是这个对象的列表
var summaryLine = new AvgCostSummary
{
GradeGroupCode = avgCostQuery.GradeGroupCode.Trim(),
Grade = firstOrDefault.Grade.Trim(),
QtyRecNt = firstOrDefault.QtyRecNt,
AvgCostDl = firstOrDefault.AvgCostDl,
AvgPricePerLb = firstOrDefault.AvgPricePerLb,
TotalCost = firstOrDefault.TotalCost,
Discount = firstOrDefault.Discount,
ConsNum = avgCostQuery.ConsNum,
PeriodBegin = avgCostQuery.PeriodBegin,
PeriodEnd = avgCostQuery.PeriodEnd
};
在这种特殊情况下,ConsNum 是没有考虑的,它不会被显示。
感谢您的任何帮助!
解决方案
我建议下面的 LINQ 查询(代码中的注释)。
summaryResults
.GroupBy(name => name.GradeGroupCode)
.Select(group =>
{
var firstItem = group.First();
return new AvgCostSummary()
{
// For all properties I use data from first result,
// as you did not specify otherwise, except TotalCost
// which I assume we ned to sum.
GradeGroupCode = firstItem.GradeGroupCode.Trim(),
Grade = firstItem.Grade.Trim(),
QtyRecNt = firstItem.QtyRecNt,
AvgCostDl = firstItem.AvgCostDl,
AvgPricePerLb = firstItem.AvgPricePerLb,
// Here we use whole group to sum TotalCost
TotalCost = group.Sum(item => item.TotalCost),
Discount = firstItem.Discount,
ConsNum = firstItem.ConsNum,
PeriodBegin = firstItem.PeriodBegin,
PeriodEnd = firstItem.PeriodEnd
}
});
注意:它会使您的数据变平,并且代替每个唯一的组代码,将只有一个带有总计的对象。
推荐阅读
- caching - 清漆缓存后端 url 请求的外部内容
- python-3.x - Firefox selenium webscraper错误:AttributeError:'method_descriptor'对象没有属性'today'
- python - Selenium webdriver Chrome 没有检测到所有的复选框和下拉菜单
- vue.js - 如何为 Gridsome 使用自定义 Transformer?
- python - Heroku 部署 plotly-dash 应用程序 - 构建失败
- rest - Apache Camel REST DSL deadLetterChannel
- bash - sed:在文件最后一行的位置搜索和替换值
- python - 如何抓取具有用户名和密码的网站?
- python - 通过谷歌 API 和 Python 将照片上传到谷歌照片
- azure - 简化 PowerShell Runbook 以发送电子邮件