有人知道LINQ对它的连接操作符执行的连接算法是什么吗?
是NestedLoop、Merge还是HashSet?有没有办法指定一个不同的,如果支持的话?
关于艾伯特
发布于 2009-10-13 09:44:38
首先,它有效地从“内部”序列创建查找,然后迭代外部序列。然后,它可以从外部序列中查找每个密钥,并生成每个适当的密钥对。如下所示(忽略参数、验证等):
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);
}
}
}
查找将在内部对键使用哈希表,因此查找任何单个键都是有效的。
https://stackoverflow.com/questions/1561622
复制