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を比較する方法を定義するためにを作成する必要がありますDataRow。それらの値のみを比較することにし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 に答える