Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net LINQ连接运算符是否使用嵌套循环、合并或哈希集连接?_.net_Linq_Join_Loops_Nested - Fatal编程技术网

.net LINQ连接运算符是否使用嵌套循环、合并或哈希集连接?

.net LINQ连接运算符是否使用嵌套循环、合并或哈希集连接?,.net,linq,join,loops,nested,.net,Linq,Join,Loops,Nested,有人知道LINQ用它的连接操作符执行什么连接算法吗 它是嵌套循环、合并还是哈希集?如果支持,是否有其他方法指定其他方法 问候 Albert首先,它有效地从“内部”序列创建查找,然后遍历外部序列。然后,它可以从外部序列中查找每个密钥,并生成每个适当的密钥对。类似这样的情况(忽略参数验证等): 公共静态IEnumerable联接 (这是数不清的, 我可数的内心世界, Func outerKeySelector, Func innerKeySelector, Func结果选择器) { Lookup=i

有人知道LINQ用它的连接操作符执行什么连接算法吗

它是嵌套循环、合并还是哈希集?如果支持,是否有其他方法指定其他方法

问候
Albert

首先,它有效地从“内部”序列创建查找,然后遍历外部序列。然后,它可以从外部序列中查找每个密钥,并生成每个适当的密钥对。类似这样的情况(忽略参数验证等):

公共静态IEnumerable联接
(这是数不清的,
我可数的内心世界,
Func outerKeySelector,
Func innerKeySelector,
Func结果选择器)
{
Lookup=inner.ToLookup(innerKeySelector);
foreach(在外部的TOuter outerItem)
{
TKey key=outerKeySelector(outerItem);
foreach(查找[key]中的TInner innerItem)
{
生成返回结果选择器(outerItem、innerItem);
}
}
}

查找将在内部为键使用哈希表,以便高效地查找任何单个键。

取决于提供程序。我的意思是在使用Linq to对象时
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);
        }
    }
}