LINQ to Entitiesで複数キーのJoin

LINQ to Entitiesを使って、データベースのテーブルで複数のキーを使ったJoinを実現するには、匿名型で複数のキーを含むclassを作ればいい。

LINQ to EntitiesでJoinを組むと、慣れないとけっこう苦労したりする。単純なキーのJoinなら比較的に簡単だが、複数のキーをJoinするにはどうすればいいか悩んだことがあった。調べた結果、匿名型でキー項目を含むclassを作って、そのclass同士をequalsで結べばいいことがわかった。

以下に例を挙げてみる。

まずはTestという名前のデータベースを作成してTestA、TestBというテーブルを作成する。それぞれキー項目が二つになるようにTestIDとTestCodeを作成する。

 

これらのテーブルから以下のような結果を取得したい。

この結果をSQLで組んだ場合は比較的簡単だ。ただJoinで結べばいい。

これをLINQ to Entitiesで実現するには以下のようにする。

ハイライトになっているところが味噌で、匿名型でキー項目を含むclassを作成して、それ同士をequalsで結んで同じ結果が返ってくるようにしている。

これで複数のキーでJoinされたデータの結果を取得することができる。

以下のようにclassを作成して明示的に指定してもかまわない。