GROUP JOINについて(Linq To Entities )

GROUP JOINについて今回は書きたいと思います。
前回のJOIN同様に微妙な感じですけど、参考になればと思います。

まずは検索から

Dim con As New DATABASS
Dim JoinList = con.AAA.GroupJoin(con.BBB, Function(x) x.ID, _
                     Function(y) y.ID, _
                     Function(x, z) New With { _
                         Key .ID = x.ID, _
                         Key .年齢 = x.年齢 _
                         Key .名前 = y.名前, _
                         Key .部署マスタ' = z, _
                     }) _
                    .Where(Function(x) CType(x.ID >= 30 And _
                                             x.年齢 >= 50), Boolean)) _
                    .OrderBy(Function(x) x.ID) _
                    .ThenBy(Function(x) x.年齢)

JOINとの違いです、
 1:「con.AAA.Join」→「con.AAA.GroupJoin
 2:「Function(x, y) New With { _」→「Function(x, z) New With { _」
 3:「Key .部署 = y.部署, _」→「Key .部署マスタ' = z, _」
この書き方により、できるテーブルの形が変わります。
 JOINの場合
  ・ID
  ・年齢
  ・名前
  ・部署名

 GROUP JOINの場合
  ・ID
  ・年齢
  ・名前
  ・部署マスタ'
   ・ID
   ・部署
   ・席番号
   ・部下数

要する基準となるテーブルに結合したいテーブルをまるまる結合した感じです。
これにより、結合すべきIDが見つからないときは部署マスタ'は作成されません。

出力も少し変わります。

For Each LoopData In JoinList
    GetListData = String.Empty
    GetListData = GetListData & clsString.SetSpace(CType(LoopData.ID, String), 5, clsString.emLR.Left) & " "
    GetListData = GetListData & clsString.SetSpace(LoopData.年齢, 3, clsString.emLR.Right) & " "
    GetListData = GetListData & clsString.SetSpace(CType(LoopData.名前, String), 20, clsString.emLR.Left) & " "
    If LoopData.部署マスタ'(0) Is Nothing Then
        GetListData = GetListData & String.Empty & " "
    Else
        GetListData = GetListData & clsString.SetSpace(JoinList1.部署マスタ'(0).部署, 10, clsString.emLR.Right)
    End If
    lstData.Items.Add(GetListData)
Next

色々やってみましたが、やはりJOINとGROUP JOINはややこしいですね。。。
テーブルが3つ以上の結合は次回書こうと思います。

書くことが出来ましたので記載しておきます。
mmdaics.hateblo.jp


以上。