LINQ 左結合と右結合 質問する

LINQ 左結合と右結合 質問する

助けが必要です、

AとBという2つのデータテーブルがあり、Aのすべての行とBの対応する行が必要です。

元:

A:                                           B:

User | age| Data                            ID  | age|Growth                                
1    |2   |43.5                             1   |2   |46.5
2    |3   |44.5                             1   |5   |49.5
3    |4   |45.6                             1   |6   |48.5

出力が必要です:

User | age| Data |Growth
------------------------                           
1    |2   |43.5  |46.5                           
2    |3   |44.5  |                          
3    |4   |45.6  |

ベストアンサー1

提供されたサンプル データと出力は、左結合を示していません。左結合の場合、出力は次のようになります (ユーザー 1 に対して 3 つの結果があることに注目してください。つまり、ユーザー 1 が持つ Growth レコードごとに 1 つずつです)。

User | age| Data |Growth
------------------------                           
1    |2   |43.5  |46.5                           
1    |2   |43.5  |49.5     
1    |2   |43.5  |48.5     
2    |3   |44.5  |                          
3    |4   |45.6  |

左結合がまだ必要であると仮定すると、Linq で左結合を実行する方法は次のとおりです。

var results = from data in userData
              join growth in userGrowth
              on data.User equals growth.User into joined
              from j in joined.DefaultIfEmpty()
              select new 
              {
                  UserData = data,
                  UserGrowth = j
              };

正しい結合を行う場合は、次のように、選択するテーブルを入れ替えるだけです。

var results = from growth in userGrowth
              join data in userData
              on growth.User equals data.User into joined
              from j in joined.DefaultIfEmpty()
              select new 
              {
                  UserData = j,
                  UserGrowth = growth
              };

コードの重要な部分は、into文とそれに続く空の場合のデフォルトこれは、他のテーブルに一致する結果がない場合にデフォルト値 (つまり null) を取得することを Linq に指示します。

おすすめ記事