如何使用LINQ对嵌套数组按税种名称分组并计算总额
税务数据按税种分组求和的LINQ实现方案
原始税务数据
原始业务数据如下:
_id:"63624b321e78f38a3d6baf3e" Taxes [0] TaxName:CGST Amount:9.0 [1] TaxName:SGST Amount:8.0 _id:"63624b321e78f38a3d6baf3e" Taxes [1] TaxName:SGST Amount:8.0
需求说明
按TaxName字段分组,计算每个税种的金额总和,预期结果如下:
CGST:9.0 SGST:16.0
当前错误代码
已创建包含taxes[]数组的movieSummary对象,尝试的LINQ分组代码未得到正确结果:
movieSummary.Add(new DSMovieSummaryReport { MovieId = orderTicket.MovieId, Taxes= orderTicket.Taxes, }); var groupByTaxNamesQuery = from tax in movieSummary group tax by tax.Taxes into newGroup orderby newGroup.Key select newGroup;
正确实现方案
你的代码问题在于直接按整个Taxes数组分组,而没有遍历每个独立的税种条目。需要先将movieSummary中所有对象的Taxes数组扁平化为单个税种条目集合,再按TaxName分组求和。
方式一:LINQ查询语法
var taxSummary = from summary in movieSummary from tax in summary.Taxes // 扁平化所有税种条目 group tax by tax.TaxName into taxGroup select new { TaxName = taxGroup.Key, TotalAmount = taxGroup.Sum(t => t.Amount) };
方式二:LINQ方法链语法
var taxSummary = movieSummary .SelectMany(summary => summary.Taxes) // 将所有Taxes数组扁平为单个序列 .GroupBy(tax => tax.TaxName) .Select(taxGroup => new { TaxName = taxGroup.Key, TotalAmount = taxGroup.Sum(t => t.Amount) });
结果输出示例
如果需要输出预期格式的结果,可遍历查询结果:
foreach (var taxItem in taxSummary) { Console.WriteLine($"{taxItem.TaxName}:{taxItem.TotalAmount}"); }
内容的提问来源于stack exchange,提问作者Anjana Padmesh
相关产品推荐
相关产品推荐

