GroupJoin メソッドには、リレーショナル データベース用語で直接相当するものはありませんが、内部結合と左外部結合のスーパーセットを実装しています。左外部結合は、他のデータ ソースに相関要素がない場合でも、最初 (左) のデータ ソースの各要素を返す結合です。
GroupJoin は左結合に相当すると思います。アウターのすべての要素は、インナーの一致したアイテムのコレクションで返されるためです。内部に一致する項目が見つからない場合、空のコレクションが外部の要素とペアになります。
しかし、なぜmsdnはそう言うのでしょうか?
GroupJoin と Join のソース コードを読みました。MarcinJuraszek は例を提供します。しかし、次のコードを使用できると思います。
Users.GroupJoin(Cars,user=>id,Car=>userId,(user,cars)=>
if(cars.count==0)
{
//John -- NULL
}
else
{
//Ted -- [ 2, 3 ]
}
return result;
);
GroupJoin の元のロジック:
Lookup<TKey, TInner> lookup = Lookup<TKey, TInner>.CreateForJoin(inner, innerKeySelector, comparer);
foreach (TOuter current in outer)
{
yield return resultSelector(current, lookup[outerKeySelector(current)]);
}
LeftJoin を書き換えることもできます。
Lookup<TKey, TInner> lookup = Lookup<TKey, TInner>.CreateForJoin(inner, innerKeySelector,
foreach (TOuter current in outer)
{
yield return resultSelector(current, lookup[outerKeySelector(current)].DefaultIfEmpty());
}