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
以上。