如何使用LINQ查询为DataGridView分组数据添加占比百分比计算
LINQ 分组统计新增百分比列实现方案
直接分两步执行查询即可,既避免重复遍历DataGridView数据源,也方便处理边界异常:
// 第一步:完成分组求和,转为List避免后续重复枚举 var groupSums = dataGridView1.Rows.Cast<DataGridViewRow>() .Where(row => row.Cells[8].Value != null) .GroupBy(row => row.Cells[8].Value.ToString()) .Select(g => new { Gruppo = g.Key, Serie = g.Sum(row => Convert.ToInt32(row.Cells[2].Value)) }) .ToList(); // 计算所有分组Serie总和,加零值判断避免除零错误 int total = groupSums.Sum(x => x.Serie); // 第二步:新增百分比列,可自行调整Math.Round的参数修改保留小数位数 var result = groupSums.Select(g => new { g.Gruppo, g.Serie, // 若需要数值类型而非格式化字符串,可去掉字符串拼接和%后缀 Percentage = total == 0 ? "0%" : $"{Math.Round((double)g.Serie / total * 100, 2)}%" }).ToList();
运行结果参考:
可选优化点:
- 若对精度要求高,可将计算中的
double替换为decimal,避免浮点运算误差 - 若需要直接绑定到控件展示,可将匿名类替换为自定义实体类,方便后续取值操作
内容的提问来源于stack exchange,提问作者Gabriele
相关产品推荐
相关产品推荐

