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