はじめに
別のタイミングで作成・取得したデータテーブル同士を比較して同じかどうかを判定する必要が結構あってハマったのでメモします。
やりたいこと
なお、行の比較は以下の式で比較的簡単に実装可能です。
行の比較
'Dt1 データテーブル1
'Dt2 データテーブル2
'戻り値はTrue/False
'行を順番に比較していって同じかどうかを判定する
Dt1.AsEnumerable().SequenceEqual(Dt2.AsEnumerable(),DataRowComparer.Default)
ちなみに、この式だと最初のテーブル2つは行とその値が一緒なのでTrueになります。
列の比較が分からなかったので調べました。
この記事でできること
- UiPathで2つのデータテーブルの列の一致・不一致を調べることができる
この記事の対象者
- UiPath Studio開発者
動作環境
- Windows10
- UiPath v2023.10
- Windows
- VB
「コードを呼び出し」アクティビティ
コードを呼び出しアクティビティをシーケンス内に入れてください。
引数を編集
以下のように引数を作成してください。
Valueには比較したいデータテーブルを入れてください。
コードを編集
コードを編集で次のコードをコピペしてください。
列の比較
' 入力引数:Dt1 データテーブル1
' 入力引数:Dt2 データテーブル2
' 出力引数:IsEqualDataTable
' 列数が異なった時点で、列名がすべて一致することはない。
If Dt1.Columns.Count <> Dt2.Columns.Count Then
IsEqualDataTable = False
Return
End If
' すべての列名を比較する。
For i As Integer = 0 To Dt1.Columns.Count - 1
' 列名が一致しない場合、Falseを返す。
If Dt1.Columns(i).ColumnName <> Dt2.Columns(i).ColumnName Then
IsEqualDataTable = False
Return
End If
Next
'すべての列名が一致していればTrueを返す。
IsEqualDataTable = True
まとめ
列だけ比較したい場合はこれだけで十分です。
行と一緒に比較したい場合は最初の式と同時使いがおすすめです。
データテーブルがnullの時はエラーが出るのでnull時はエスケープする必要あります。