首页 > 后端开发 > C++ > 如何使用 LINQ 执行左连接、分组和计算非空子记录?

如何使用 LINQ 执行左连接、分组和计算非空子记录?

Linda Hamilton
发布: 2025-01-08 20:01:43
原创
561 人浏览过

How to Perform a Left Join, Group By, and Count Non-Null Child Records using LINQ?

使用LINQ实现左连接、分组和非空子记录计数

在SQL中,以下查询在ParentTable和ChildTable两个表之间执行左连接,并计算与每个父记录关联的子记录数量:

<code class="language-sql">SELECT p.ParentId, COUNT(c.ChildId)
FROM ParentTable p
  LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId
GROUP BY p.ParentId</code>
登录后复制

将此查询转换为LINQ to SQL可以使用以下步骤:

  1. 使用JoinDefaultIfEmpty方法执行左连接:
<code class="language-csharp">from p in context.ParentTable
join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1
from j2 in j1.DefaultIfEmpty()</code>
登录后复制
  1. 按父ID分组结果:
<code class="language-csharp">group j2 by p.ParentId into grouped</code>
登录后复制
  1. 统计与每个父记录关联的子记录数量:
<code class="language-csharp">select new { ParentId = grouped.Key, Count = grouped.Count() }</code>
登录后复制

然而,上述代码将返回每个父记录的子记录总数,包括空值。要仅计算非空子记录,请修改Count表达式如下:

<code class="language-csharp">select new { ParentId = grouped.Key, Count = grouped.Where(t => t.ChildId != null).Count() }</code>
登录后复制

这将确保仅计算ChildId不为空的子记录。 最终的LINQ查询将准确反映SQL查询的逻辑,并有效地统计非空子记录。

以上是如何使用 LINQ 执行左连接、分组和计算非空子记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

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