C#中通过LINQ关联DataTable并更新dtA的实现方法问询
解决方案
可以通过在LINQ查询中关联两个DataTable后,利用ToList().ForEach()的链式调用直接完成字段更新,避免单独编写foreach循环。修改后的代码如下:
(from a in dtA.AsEnumerable() join b in dtB.AsEnumerable() on a["accountno"] equals b["acc_no"] select new { TargetRow = a, SourceValue = b["fieldB"] }) .ToList() .ForEach(item => item.TargetRow["fieldA"] = item.SourceValue);
关键说明
- 原代码仅查询出关联字段,未执行更新操作。这里通过
select将需要更新的DataRow(dtA的行)和来源值(dtB的fieldB)封装为匿名类型,确保后续能直接操作目标行。 - LINQ查询是延迟执行的,调用
ToList()会立即枚举所有关联结果,再通过List的ForEach方法遍历每个关联项,完成fieldA的赋值。 - 如果
fieldA和fieldB数据类型不一致,需要添加类型转换,例如:item.TargetRow["fieldA"] = Convert.ToString(item.SourceValue); - 若存在一个dtA行匹配多个dtB行的情况,最后一次赋值会覆盖之前的结果,需确认业务逻辑是否允许这种情况。
内容的提问来源于stack exchange,提问作者Mark Roworth
相关产品推荐
相关产品推荐

