如何通过遍历表列结合Lambda表达式简化重复代码?
简化重复的
SetCellForData调用方案 嘿,这事儿太常见了——重复写十行几乎一样的代码简直是维护噩梦!你想通过遍历列映射来简化的思路完全正确,我给你两种实用的实现方式:
方式一:使用值元组(C# 7.0+)
值元组是最简洁的方式,不用额外定义类,直接把每列的显示名和计算逻辑打包:
// 先定义好所有列的映射关系:显示名称 + 求和逻辑 var columnMappings = new List<(string DisplayName, Func<IGrouping<YourGroupKeyType, YourTableRowType>, decimal> SumSelector)> { ("Column1", group => group.Sum(row => row.ColumnName1FromTable)), ("Column2", group => group.Sum(row => row.ColumnName2FromTable)), // 继续添加剩下的列... ("Column10", group => group.Sum(row => row.ColumnName10FromTable)) }; // 然后遍历分组结果,再遍历映射关系执行设置 foreach(var group in groupedResults) { foreach(var mapping in columnMappings) { SetCellForData(mapping.DisplayName, mapping.SumSelector(group)); } }
注意:记得把代码里的YourGroupKeyType替换成你分组用的键类型(比如int、string),YourTableRowType替换成表行的实际类型。
方式二:使用自定义类(更适合复杂场景)
如果以后需要给列映射加更多属性(比如列宽、数值格式),自定义类会更灵活:
// 先定义一个列映射类 public class ColumnSumMapping { public string DisplayName { get; set; } public Func<IGrouping<YourGroupKeyType, YourTableRowType>, decimal> SumCalculator { get; set; } } // 初始化映射集合 var columnMappings = new List<ColumnSumMapping> { new ColumnSumMapping { DisplayName = "Column1", SumCalculator = group => group.Sum(row => row.ColumnName1FromTable) }, new ColumnSumMapping { DisplayName = "Column2", SumCalculator = group => group.Sum(row => row.ColumnName2FromTable) }, // 其他列依次添加... }; // 执行遍历设置 foreach(var group in groupedResults) { foreach(var mapping in columnMappings) { SetCellForData(mapping.DisplayName, mapping.SumCalculator(group)); } }
为什么这么做?
- 可维护性:以后要新增/修改列,只需要在映射集合里调整,不用重复复制粘贴
SetCellForData代码 - 可读性:所有列的配置集中在一起,一眼就能看清所有列的对应关系
- 扩展性:如果以后要给列加额外逻辑(比如格式化数值、判断是否显示),直接在映射里加属性就行
内容的提问来源于stack exchange,提问作者Sigmundur
相关产品推荐
相关产品推荐

