首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >合并vb.net中的2个数据表

合并vb.net中的2个数据表
EN

Stack Overflow用户
提问于 2009-08-11 19:21:43
回答 3查看 18K关注 0票数 0

我有2 DataTables在vb.net。每个存储过程都是从自己的存储过程中填充的。表A在第一列中包含一个项目编号。表B还包含第一列中的项目编号。表A可以有许多具有相同项目编号的记录,但是表B在每个项目编号中总是只有一条记录。我想将表B中的数据附加到表A中的每个匹配记录中。我将如何做到这一点?

表A可能看起来如下:

PROJECT#,数量

12345,100

12345,200

12345,300

表B可能看起来如下:

PROJECT#,客户

12345,美国广播公司

--我想将两者合并,创建如下内容:

PROJECT#,数量,客户

12345,100,美国广播公司

12345,200,美国广播公司

12345,300,美国广播公司

请帮帮我!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-14 14:29:22

这可能对你有帮助,而且可能是半通用的,适用于其他情况.

它是一个函数,它将通过传入两个表、两个数组(包含每个表中所需的列名)和用于连接表的键来合并数据(如您的示例所示)。

假设tblA是驱动表,查找tblB。

代码语言:javascript
运行
复制
   Sub Main()

      Dim tbl As DataTable

      Dim colsA() As String = {"ProjectNo", "Quantity"}
      Dim colsB() As String = {"Customer"}
      Dim sKey As String = "ProjectNo"

      tbl = MergeData(tblA, tblB, colsA, colsB, sKey)

   End Sub

   Private Function MergeData(ByVal tblA As DataTable, ByVal tblB As DataTable, _
                              ByVal colsA() As String, ByVal colsB() As String, _
                              ByVal sKey As String) As DataTable

      Dim tbl As DataTable
      Dim col As DataColumn
      Dim sColumnName As String
      Dim row As DataRow
      Dim newRow As DataRow
      Dim dv As DataView

      tbl = New DataTable
      dv = tblB.DefaultView

      For Each sColumnName In colsA
         col = tblA.Columns(sColumnName)
         tbl.Columns.Add(New DataColumn(col.ColumnName, col.DataType))
      Next
      For Each sColumnName In colsB
         col = tblB.Columns(sColumnName)
         tbl.Columns.Add(New DataColumn(col.ColumnName, col.DataType))
      Next

      For Each row In tblA.Rows
         newRow = tbl.NewRow
         For Each sColumnName In colsA
            newRow(sColumnName) = row(sColumnName)
         Next

         dv.RowFilter = (sKey & " = " & row(sKey).ToString)
         If dv.Count = 1 Then
            For Each sColumnName In colsB
               newRow(sColumnName) = dv(0).Item(sColumnName)
            Next
         End If
         tbl.Rows.Add(newRow)
      Next

      Return tbl

   End Function
票数 4
EN

Stack Overflow用户

发布于 2009-08-11 19:26:53

我建议使用LINQ方法,LINQ有一个可以处理这个问题的联接操作符。

代码语言:javascript
运行
复制
From q In quantities _
Join c In customers On q.project Equals c.project _
Select Quantity = q, Customer = c
票数 3
EN

Stack Overflow用户

发布于 2016-08-08 17:08:44

任何AsEnumerable都可以在LINQ中使用

DataTable1().AsEnumerable();var customers = DataTable2().AsEnumerable();

代码语言:javascript
运行
复制
var result = from dtquanRow in quantities
        join dtcustomers in customers
        on dtquanRow.Field<string>("project") equals dtcustomers.Field<string>("project")

        select new
        {
            project = dtquanRow.Field<string>("project"),
            Quantity = dtquanRow.Field<string>("Quantity"),
           Customer = dtquanRow.Field<string>("Customer")
        };
moredetailed query and table to linq conversion 

对克里斯·奇尔弗斯的进一步解释

从Q_ quantities _ Join c到q.project上的客户= c.project _ Select = q,Customer =c

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1262383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档