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

通过同值关联另一DataTable更新多列的非Lambda实现方案

问题根因

List<T>.ForEach()方法仅接受1个Action<T>类型的入参,不支持传入多个独立Lambda表达式,因此原写法会直接触发编译错误。

可行实现(无任何Lambda表达式)

以下方案完全不使用Lambda,通过字典索引+传统循环实现多字段更新,性能优于原Linq Join写法,尤其适合数据量较大的场景:

// 第一步:构建源表datatable_B的name字段索引,加速匹配
Dictionary<string, DataRow> sourceMap = new Dictionary<string, DataRow>();
foreach (DataRow bRow in datatable_B.Rows)
{
    string matchKey = bRow.Field<string>("name");
    // 若业务中name为唯一键,可去掉重复判断直接覆盖/新增
    if (!sourceMap.ContainsKey(matchKey))
    {
        sourceMap.Add(matchKey, bRow);
    }
}

// 第二步:遍历目标表逐行匹配、更新多字段
foreach (DataRow aRow in datatable_A.Rows)
{
    string matchKey = aRow.Field<string>("name");
    if (sourceMap.TryGetValue(matchKey, out DataRow matchedBRow))
    {
        aRow["phone number"] = matchedBRow["phone number"];
        aRow["address"] = matchedBRow["address"];
        aRow["nickname"] = matchedBRow["nickname"];
        aRow["body weight"] = matchedBRow["body weight"];
    }
}

方案优势

  • 全程使用传统循环、字典、DataRow原生索引器,无任何=>形式的Lambda表达式,完全符合要求
  • 字典索引将两表匹配的时间复杂度从嵌套遍历的O(n*m)降至O(n+m),数据量越大性能提升越明显
  • 字段增减逻辑简单,后续需要新增同步字段时,仅需在匹配成功的代码块内新增一行赋值语句即可
  • 内置重复键判断逻辑,可根据业务需求灵活调整(比如重复键取最后一条、抛出校验异常等)

内容的提问来源于stack exchange,提问作者Kay Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:27:19