多个Linq查询结果Concat后如何对重复分组的数值求和
解决方案
你当前的问题根源是:对每个DataGridView单独做了分组求和后直接拼接结果,相同分组在不同DataGridView中的统计结果自然会作为独立条目存在。只需对拼接后的所有统计结果做二次全局分组求和即可,也可以同时优化代码减少重复逻辑。
优化后完整代码
private void seriesettimanali() { // 先把所有要统计的DataGridView放到集合里,避免重复写相同逻辑 var allGrids = new List<DataGridView> { dataGridView1, dataGridView2, dataGridView3, dataGridView4, dataGridView5 }; // 一次性提取所有Grid中符合要求的行数据,再统一分组求和 var finalResult = allGrids // 遍历每个dgv,拿到所有行 .SelectMany(grid => grid.Rows.Cast<DataGridViewRow>() // 过滤掉分组列为空的行 .Where(row => row.Cells[7].Value != null) // 统一取出分组名和对应数量,不用每个dgv单独分组 .Select(row => new { Group = row.Cells[7].Value.ToString(), Quantity = Convert.ToInt32(row.Cells[1].Value) })) // 全局按分组名分组 .GroupBy(item => item.Group) // 对每个分组的数量求和,得到最终结果 .Select(g => new { Group = g.Key, Quantity = g.Sum(item => item.Quantity) }) .ToList(); dataGridView6.DataSource = finalResult; }
最小改动方案
如果你不想调整原有写法,只需要在你现有代码的resultSum4之后加一段二次分组逻辑即可实现需求:
// 原有拼接逻辑不变,追加以下代码 var finalResult = resultSum4 .GroupBy(x => x.Group) .Select(g => new { Group = g.Key, Sum = g.Sum(x => x.Sum) }) .ToList(); dataGridView6.DataSource = finalResult;
内容的提问来源于stack exchange,提问作者Gabriele
相关产品推荐
相关产品推荐

