GROUP JOINの複数結合について(Linq To Entities )

なんかうまく行ったので残しておきます。
絶対にSQLで書いたほうが見やすくメンテもし易いと思いますが。。

さて、話を戻して複数条件の結合方法です!
下記のようなテーブルから、データを結合させて出力するパターンです。
f:id:daichi-t-0123:20161102144039p:plain

AAA、BBB、CCCの3つのテーブルをもとにDDDのテーブルを作成します。

Dim con As New DATABASS
Dim JoinList = con.CCC.GroupJoin(con.AAA, Function(ccc) New With {Kye .ID = Ctype(ccc.社員ID,Integer), Kye .コード = Ctype(ccc.部署コード,Integer)},
                                          Function(aaa) New With {Kye .ID = Ctype(aaa.社員ID,Integer), Kye .コード = Ctype(aaa.部署コード,Integer)},
                                          Function(ccc, aaa) New With {ccc, aaa}) _
                      .SelectMany(Function(Sccc) Sccc.aaa.DefaultIfEmpty(), Function(ccc, aaa) New With {ccc.ccc, aaa}) _
                      .GroupJoin(con.BBB, Function(ccc) ccc.ccc.部署コード, aaa.部署コード, Function(ccc, bbb) New With {ccc, bbb}) _
                      .SelectMany(Function(Sccc) Sccc.bbb.DefaultIfEmpty(), _
                                  Function(ccc, bbb) New With {Key .SEQ = ccc.ccc.SEQ,
                                                               Key .名前 = ccc.aaa.名前,
                                                               Key .部署名 = bbb.部署名,
                                                               Key .請求書発行NO1 = ccc.ccc.請求書発行NO}).ToArray

※ポイントは「GROUPJOIN」のキーの型を比較元と比較先で合わせる。
※integer?とintegerは別として扱われるため注意。
そんなのも知らないのかと思われますが、「?」がつくとNullが入っててもOKとするような意味合いになります。

出力は変わらないので前の記事を参照して下さい。
mmdaics.hateblo.jp

以上。