LINQ Join运算符是使用嵌套循环,合并还是HashSet连接?

aat*_*tia 6 .net linq loops nested join

有没有人知道LINQ使用Join运算符执行的Join算法.

是NestedLoop,Merge还是HashSet?如果支持,有没有办法指定另一个?

关心艾伯特

Jon*_*eet 9

首先,它有效地从"内部"序列创建查找,然后遍历外部序列.然后,它可以从外部序列中查找每个键,并生成每个适当的对.这样的事情(忽略参数验证等):

public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>
    (this IEnumerable<TOuter> outer,
     IEnumerable<TInner> inner,
     Func<TOuter, TKey> outerKeySelector,
     Func<TInner, TKey> innerKeySelector,
     Func<TOuter, TInner, TResult> resultSelector)
{
    Lookup<TKey, TInner> lookup = inner.ToLookup(innerKeySelector);
    foreach (TOuter outerItem in outer)
    {
        TKey key = outerKeySelector(outerItem);
        foreach (TInner innerItem in lookup[key])
        {
            yield return resultSelector(outerItem, innerItem);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

查找将在内部使用哈希表作为密钥,以便查找任何单个密钥是有效的.