Linked Server を使用できない場合は、DataRelationクラスを調査することをお勧めします。
あなたの例では、2 つの SELECT を実行します。
DataSet domain = new DataSet();
DataTable dataFromA = null;
DataTable dataFromB = null;
using(SqlConnection conn1 = new SqlConnection("FirstConnectionString"))
{
DataTable dataFromA = //result from SELECT id, name FROM TableA
}
using(SqlConnection conn2 = new SqlConnection("SecondConnectionString"))
{
DataTable dataFromB = //result from SELECT id, name FROM TableB
}
domain.Tables.Add(dataFromA);
domain.Tables.Add(dataFromB);
ここでプロセスを言い換えました。
メモリ内に両方のデータ テーブルがあれば、それらの間に DataRelation を作成できます。
DataRelation idRelationship = new DataRelation("ABLink", dataFromA.Columns["Id"], dataFromB.Columns["Id"]);
その後、この関係を必要に応じて探索できます。
foreach(DataRow aRow in dataFromA.Rows)
{
//matching B Rows:
DataRow[] bRows = aRow.GetChildRows(idRelationship);
}
これは事実上、2 つのテーブル間のインメモリ インデックスです。