LINQ Join 运算符是否使用嵌套循环、合并或 HashSet 连接?

2024-06-30

有谁知道 LINQ 使用其 Join 运算符执行什么 Join 算法。

是嵌套循环、合并还是哈希集?如果支持的话,有什么方法可以指定不同的吗?

问候 阿尔伯特


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LINQ Join 运算符是否使用嵌套循环、合并或 HashSet 连接? 的相关文章

  • 使用 .NET 4.5 构建的应用程序可以在 .NET 4.0 上运行吗?

    我的项目面向 NET 4 5 它不使用任何新的 4 5 方法 因此它实际上在仅安装 NET 4 0 的计算机上运行良好 这一切都很好 直到我添加了一些扩展方法和反射 然后 当我在 4 0 计算机上运行此 NET 4 5 程序时 它失败并显示
  • ASP.NET 会员更改密码不起作用

    我有这段代码 用于在用户单击密码重置按钮时更改用户的密码 使用额外的代码登录 ELMAH 以便我可以尝试找出问题所在 这是在 ASP NET MVC 2 中 使用标准的 aspnet 成员资格提供程序 具有如下简单的视图 New Passw
  • 如何根据子集合属性对集合进行排序

    我想根据子集合属性对集合进行排序 the subcollection public class Salary public int SalaryId get set public int SalaryYear get set public
  • 通过 dll 引用而不是 VS 中的项目引用来管理 .NET 程序集依赖项

    我们有一个由多个子项目 大约 20 个 组成的 NET 项目 有多个解决方案 每个解决方案仅包含与特定解决方案相关的子项目 为了允许任意解决方案 我们的子项目从不通过项目引用相互引用 而是通过直接 dll 引用 对 csproj 文件进行少
  • MySQL JOIN 与 SUM 和 3 个表

    我有下表 球员 赛事 得分 我想要一份每个球员在 2012 年获得多少积分的列表 我希望这份名单包含所有球员 即使有些球员在 2012 年还没有参加过比赛 所以理论上它应该打印 Ola Hansen 6 Tove Svendson 0 Ka
  • WiX 自定义引导程序应用程序和 .NET 4.5

    我在获取针对 NET 4 5 的 WiX 自定义引导程序应用程序时遇到困难 我的 Bundle wxs 中有以下行
  • 呈螺旋状循环

    一位朋友需要一种算法 可以让他循环遍历 NxM 矩阵 N 和 M 是奇数 的元素 我想出了一个解决方案 但我想看看我的 SO ers 同胞是否能想出更好的解决方案 我将发布我的解决方案作为该问题的答案 示例输出 对于 3x3 矩阵 输出应为
  • 我应该使用 Base64 编码还是 byte[] 在 .NET Web 服务中返回二进制数据

    我有一个简单的问题 通过 NET 中的 Web 服务公开二进制数据时 我应该返回字节数组还是简单地对二进制数据进行 base64 编码 这两种方法都有优点 缺点吗 主要受支持等 使用字节数组 通过 SOAP 协议 该字节数组将自动使用 ba
  • Visual Studio - 更改类时自动刷新类视图

    我有 Java 背景 多年来一直在使用 Eclipse 使用 Visual Studio 2008 时我错过的一项功能是 当我更改类时 类视图不会自动刷新 在 Eclipse 中 它有一个 类 大纲 窗口 它代表当前类并显示方法 属性等 这
  • 在 ASP.NET MVC 3 Web 应用程序项目之间共享视图

    我有几个 ASP NET MVC 3 Web 应用程序 它们有很多通用对象 相同的登录控制器 他们的登录系统之间的一些差异体现在web config files 抬头 明细视图 发票 付款单 付款单等 为了减少代码的冗余 我将通用控制器和视
  • 从表达式创建动态 Linq select 子句

    假设我定义了以下变量 IQueryable
  • 循环 XSL 中的索引

    我在 XSL 中有两个像这样的嵌套循环 此时我使用position 但这不是我需要的
  • C# 泛型方法,new() 构造函数约束中的类型参数

    有没有办法创建一个使用的通用方法new 要求类具有特定类型的构造函数属性的约束 例如 我有以下代码 public T MyGenericMethod
  • 为什么尝试块很昂贵?

    我听说过这样的建议 如果可能的话 您应该避免使用 try catch 块 因为它们很昂贵 我的问题专门针对 NET 平台 为什么 try 块很昂贵 回应摘要 在这个问题上显然有两个阵营 一些人说 try 块很昂贵 另一些人则说 也许有点点
  • 使用 X509 证书对多个收件人进行 XML 加密和解密

    我已经成功地使用 MSDN 上的示例来加密和解密 xml 文档 http msdn microsoft com en us library ms229744 aspx http msdn microsoft com en us librar
  • 将“列表”项附加到 StringBuilder

    我尝试将项目附加到List
  • 在哪里可以查看 LINQ 源代码?

    我需要编写自己版本的 except 方法 或者至少以某种方式修改 LINQ 方法的工作方式 我正在与大型自定义对象列表进行比较 并且需要将匹配项从列表 A 连接到列表 B 我认为除外哈希表构建是进行比较的最快方法 但该方法只会返回非匹配项
  • 用于了解 web.config 要点的资源

    了解使用 web config 设置可以 或不可能 实现什么效果的最佳资源是什么 维基百科目前确实缺乏答案 而且我浏览过的许多网站仅引用和解释了一两个配置 好吧 我想你需要这个 ASP Net 配置 http msdn microsoft
  • 双击 C# 中的 Windows 窗体

    如何检测哪个鼠标按钮双击了表单 即左键 右键或中键 Updated 我使用的是 NET2 0 将最后点击的按钮存储在MouseUp事件 然后在双击事件中检查该事件 示例代码 MouseButtons lastButtonUp MouseBu
  • Athena:最小化查询扫描的数据,包括 JOIN 操作

    假设Athena中有一个外部表 它指向s3上以parquet格式存储的大量数据 它包含很多列 并在名为 timeid 的字段上进行分区 现在 还有另一个外部表 小表 将 timeid 映射到日期 当较小的表也在 timeid 上分区并且我们

随机推荐