You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过遍历表列结合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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:36:05