groupjoin方法在关系数据库中没有直接等价的方法
但是它实现了内部连接和左外部连接的超集
加入。左外部联接是返回
第一个(左)数据源,即使它在
其他数据源。
我认为groupjoin相当于left join。因为outer的所有元素都将与inner中匹配项的集合一起返回。如果在内部找不到匹配的项,则空集合将与外部的元素配对。
但为什么msdn会这么说呢?
我已经阅读了groupjoin和join的源代码。马尔金朱拉泽克提供了一个例子。但我认为我们可以使用以下代码。

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());
}

最佳答案

考虑以下情况:

TableA - Users

id -- name
1  -- Tom
2  -- John
3  -- Ted

TableB - Cars

id -- userId
1  -- 1
2  -- 3
3  -- 3

用户名和汽车识别号的标准LEFT JOIN将返回:
name -- carId
Tom  -- 1
John -- NULL
Ted  -- 2
Ted  -- 3

使用GroupJoin将得到:
name -- carId
Tom  -- [ 1 ]
John -- [ ]
Ted  -- [ 2, 3 ]

看到区别了吗?
在SQL中,左侧的IDEM被显示为与“ccc>条件匹配的多个正确项目的许多倍。
JOIN上,您将获得一次左侧项和一组匹配GroupJoin条件的右侧项。

09-06 00:18