難しい方法と呼ばれる 1 つの方法は、Linq の拡張メソッドを使用して結合の組み合わせを構築することです。このようにして、コレクション (テーブル) をループし、必要に応じて追加できます。
たとえば、これは次のとおりです。
from t1 in Table1
join t2 in Table2 on t1.ID equals t2.ID
join t3 in Table3 on t2.ID equals t3.ID
select new { t1, t2, t3 }
次のように書き換えることができます (LinqPad を使用すると簡単に実行できます):
var query = Table1
.Join (
Table2,
t1 => t1.ID,
t2 => t2.ID,
(t1, t2) => new { t1 = t1, t2 = t2 }
)
.Join (
Table3,
temp0 => temp0.t2.ID,
t3 => t3.ID,
(temp0, t3) => new { t1 = temp0.t1, t2 = temp0.t2, t3 = t3 }
)
;
これは分割することができ、一連のコレクション (t1/t2/t3) をループしながらこれを機能させることができると思います。
var query1 = Table1
.Join (
Table2,
t1 => t1.ID,
t2 => t2.ID,
(t1, t2) => new { t1 = t1, t2 = t2 }
);
var query2 = query1
.Join (
Table3,
temp0 => temp0.t2.ID,
t3 => t3.ID,
(temp0, t3) => new { t1 = temp0.t1, t2 = temp0.t2, t3 = t3 }
);
完全な解決策ではありませんが、説明しようとしているのはその考えです。
そのため、query1、query2 などを「ハードコーディング」する代わりに、一連のコレクションをループしながら同じことを行うことができます。
難しそうですが、きっとそうなるでしょう。