我有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,美国广播公司
请帮帮我!
发布于 2009-08-14 14:29:22
这可能对你有帮助,而且可能是半通用的,适用于其他情况.
它是一个函数,它将通过传入两个表、两个数组(包含每个表中所需的列名)和用于连接表的键来合并数据(如您的示例所示)。
假设tblA是驱动表,查找tblB。
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发布于 2009-08-11 19:26:53
我建议使用LINQ方法,LINQ有一个可以处理这个问题的联接操作符。
From q In quantities _
Join c In customers On q.project Equals c.project _
Select Quantity = q, Customer = c发布于 2016-08-08 17:08:44
任何AsEnumerable都可以在LINQ中使用
DataTable1().AsEnumerable();var customers = DataTable2().AsEnumerable();
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
https://stackoverflow.com/questions/1262383
复制相似问题