助けが必要です、
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 に指示します。