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

如何修改LINQ查询,连接两个DataTable时同时获取指定列?

解决方法

首先需要先构建目标数据表的结构,包含原dt1的所有列以及需要从dt2获取的col2列:

' 复制dt1的表结构
Dim out_dt As DataTable = dt1.Clone()
' 添加dt2的col2列,确保数据类型与dt2中该列一致
out_dt.Columns.Add("col2", dt2.Columns("col2").DataType)

接下来修改LINQ查询,用Join替代原有的交叉查询(更高效),并在Select中直接构造包含所有所需列的DataRow:

Dim resultRows = From row1 In dt1.AsEnumerable()
                 Join row2 In dt2.AsEnumerable()
                 On row1("id").ToString() Equals row2("id").ToString()
                 Select out_dt.LoadDataRow(
                     ' 合并dt1当前行的所有值和dt2的col2值
                     row1.ItemArray.Concat({row2("col2")}).ToArray(),
                     LoadOption.Upsert
                 )

' 将查询结果转换为DataTable
out_dt = resultRows.CopyToDataTable()

说明

  • 用Join替代原有的From row1 in dt1, row2 in dt2可以避免生成笛卡尔积,大幅提升大数据量下的查询性能。
  • row1.ItemArray.Concat({row2("col2")}).ToArray()会自动把dt1当前行的所有列值和dt2的col2值合并成一个数组,无需手动逐个列指定,适配列数量多的场景。
  • 整个过程在一次LINQ查询中完成数据关联与列合并,避免后续循环处理带来的额外耗时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:18:17