0

我有 2 个数据表,它们具有相同的列但具有不同的数据,有时有些行共享相同的 ID

我想将那些加入到 table2 中某些行的 ID 在 table1 中不存在的表中

so if i the following tables
ID Name
1  A
2  B
3  C

ID Name
5  D
1  A
2  B
3  C

the from joining would be

ID Name
1  A
2  B
3  C
5  D

这是我尝试过的

 Dim q = From e In tbl1.AsEnumerable Join r In tbl2.AsEnumerable On e.Field(Of Integer)("id") Equals r.Field(Of Integer)("id")

但不知道如何将其保存到数据表中

4

1 回答 1

1

LINQ 在使用方面并不是那么好,DataTable但您可以执行以下操作:

Dim diff = tbl2.AsEnumerable().Except(tbl1.AsEnumerable(), New DataRowComparer())

Dim tbl = tbl1.Copy()
For Each dataRow As DataRow In diff
    tbl.ImportRow(dataRow)
Next

您需要创建一个IEqualityComparer来定义如何比较DataRows。我决定只比较它们的Id值,但您可以以类似的方式比较每一列:

Public Class DataRowComparer
    Implements IEqualityComparer(Of DataRow)

    Public Function Equals(ByVal x As DataRow, ByVal y As DataRow) As Boolean Implements IEqualityComparer(Of DataRow).Equals
        Return CInt(x("Id")) = CInt(y("Id"))
    End Function

    Public Function GetHashCode(ByVal obj As DataRow) As Integer Implements IEqualityComparer(Of DataRow).GetHashCode
        Return CInt(obj("Id")).GetHashCode()
    End Function
End Class
于 2012-12-11T06:04:28.820 回答