如何修改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
相关产品推荐
相关产品推荐

