1.テーブルの全列で主キーを設定する
2.比較するテーブル同士をマージする
3.重複する行をDataRowStateから判定して抽出する
という処理で、重複する(完全に一致する)行だけを抽出します。
差分がある(一致しない)行だけを抽出することも可能です。
主キーを使う関係で、テーブル内にNullが含まれると使えません。
処理全体

①データテーブルの構築
②主キーの設定
③AcceptChangeしてテーブル1にテーブル2をマージ
④テーブル1からModifiedの行を抽出
⑤抽出結果をログ出力
の5つのシーケンスに分けています。
以下で一つずつ見ていきましょう。
①データテーブルの構築

同じ構造のデータテーブルを2つ作成します。
ここではわかりやすく「データテーブルの構築」アクティビティを使っていますが、
ExcelからReadRangeしたりWebからデータスクレイピングしてデータテーブルを作ってもOKです。
テーブルの内容は以下の通りです。

赤枠で囲ったレコードがどちらのテーブルにも存在する(重複する)レコードです。
今回はこの赤色のレコードを抽出していきます。
②主キーの設定

テーブル1の全ての列を使って主キー(正確には複合主キー)を設定します。
DataColumnを格納するコレクション型の変数 dataColumn1 を宣言し、
繰り返しでこの変数にテーブル1の全てのDataColumnを追加、
テーブル1のPrimaryKey(主キー)にdataColumn1 をToArrayで配列に変換し渡す、という流れです。
③AcceptChangeしてテーブル1にテーブル2をマージ

テーブル1にAcceptChangeメソッドを実行しDataRowStateを取れる状態にした上で、
テーブル1にテーブル2をマージします。
④テーブル1からModifiedの行を抽出

マージされた側のテーブル1はDataRowStateが以下の3つに分かれています。
- Added:追加されたレコード = テーブル2だけに存在するレコード
- Modified:変更されたレコード = 両方のテーブルに存在するレコード
- Unchanged:変更されていないレコード = テーブル1だけに存在するレコード
GetChangesメソッドでDataRowStateがModifiedのレコードを取得すれば、両方のテーブルに存在する(重複する)レコードを取れることになります。
差分があるレコードを取りたい場合は、DataRowStateがAddedとUnchangedのレコードを取得してマージすればOKです。
⑤抽出結果をログ出力

抽出したレコード(テーブル)を文字列に変換してログ出力しています。
結果は以下の通りです。

無事両方のテーブルに存在するレコードだけを抽出できています。
お疲れ様でした。
動作環境
UiPath.System.Activities 21.10.4
参考