首页 > 后端开发 > C++ > 扩展方法如何简化 LINQ 中的左外连接?

扩展方法如何简化 LINQ 中的左外连接?

Barbara Streisand
发布: 2025-01-24 10:12:10
原创
689 人浏览过

How Can Extension Methods Simplify Left Outer Joins in LINQ?

使用 LINQ 的左外连接扩展方法

在 LINQ 中执行外连接可以使用 JoinDefaultIfEmpty 方法的组合来实现。但是,为了提高代码的可读性和简洁性,扩展方法提供了一种更方便的方式来表达这些操作。

使用扩展方法执行左外连接,请考虑以下语法:

<code class="language-csharp">Foo.GroupJoin(Bar, f => f.Foo_Id, b => b.Foo_Id, (f,b) => ...)
    .Select(...)</code>
登录后复制

在此语法中:

  • GroupJoin 根据键选择器对第一个序列 (Foo) 中的元素进行分组,并使用兼容的键选择器将其与第二个序列 (Bar) 连接。
  • 结果是一个元组的可枚举集合,其中每个元组包含第一个序列中的一个元素和第二个序列中元素的分组可枚举集合。
  • SelectMany 用于展平分组的元素并将它们与第一个序列组合。
  • DefaultIfEmpty 用于确保如果第二个序列中没有匹配的元素,则返回默认值。

要完成左外连接,剩下的步骤是对组合的元素执行选择。在这种情况下,可以使用 Select 方法来投影每个元组的所需属性。

例如,要在 Foo 和 Bar 之间根据 Foo_Id 列表达左外连接,可以使用以下代码:

<code class="language-csharp">var qry = Foo.GroupJoin(
          Bar, 
          foo => foo.Foo_Id, 
          bar => bar.Foo_Id,
          (x,y) => new { Foo = x, Bars = y })
       .SelectMany(
           x => x.Bars.DefaultIfEmpty(),
           (x,y) => new { Foo=x.Foo, Bar=y});</code>
登录后复制

此代码生成一个匿名类型的可枚举集合,其中每个类型都包含来自 Foo 表的 Foo 属性和来自 Bar 表的 Bar 属性(如果不存在匹配的 bar,则为 null)。

以上是扩展方法如何简化 LINQ 中的左外连接?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板