DataTableは便利ですが、JOINの機能がありません。そのため、以下のような方法を使って擬似的にJOINを実現するしかありませんでした。
DataColumn.Expression プロパティ (System.Data)
行のフィルタ処理、列内の値の計算、または集約列の作成に使用する式を取得または設定します。
親子のリレーションシップの参照
列名の前に Parent を付けて、式の中で親テーブルを参照できます。たとえば、Parent.Price は、親テーブル内の Price という名前の列を参照します。
列名の前に Child を付けて、式の中で子テーブル内の列を参照できます。ただし、子のリレーションシップから複数の行が返される可能性があるため、集約関数には子への参照を含める必要があります。たとえば、Sum(Child.Price) は、子テーブルの Price という名前の列の合計を返します。
しかし、C#3.0以上ならLINQ to DataSetでJOINできます。こんな感じです。
string userID = "900000"; using (UserDataSet dataSet = GetUserDataSet()) { var query = from user in dataSet.UserInfo join master in dataSet.UserMaster on user.UserID equals master.UserID where user.UserID == userID select master.UserDispName; }
2011/07/11追記
事前に全てのDataTableにFillすることになるので、LINQ to SQLを使った方がパフォーマンス面で有利かもしれません。(未確認)