首页 > 后端开发 > C++ > 如何通过分组准确统计 LINQ 左连接中的子记录?

如何通过分组准确统计 LINQ 左连接中的子记录?

Barbara Streisand
发布: 2025-01-08 20:31:55
原创
277 人浏览过

How to Accurately Count Child Records in a LINQ Left Join with Grouping?

掌握 LINQ:通过分组进行左连接中的准确子记录计数

将 SQL 查询转换为 LINQ to SQL 可能很棘手,特别是在处理左连接、分组和准确记录计数等复杂场景时。 此示例演示如何通过分组正确计算左连接中的子记录,解决常见陷阱。

考虑这个 SQL 查询:

<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 翻译可能会忽略处理空值的关键细节:

<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()
group j2 by p.ParentId into grouped
select new { ParentId = grouped.Key, Count = grouped.Count() }</code>
登录后复制

这种方法错误地计算了空值。 解决方案在于修改 Count() 方法,过滤掉 null ChildId 值:

<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()
group j2 by p.ParentId into grouped
select new { ParentId = grouped.Key, Count = grouped.Count(t => t.ChildId != null) }</code>
登录后复制

这个精炼的 LINQ 查询仅准确地计算非空 ChildId 值,为每个父记录提供正确的子记录计数。 请记住在 LINQ to SQL 中使用左联接和聚合函数时始终考虑空值,以确保数据完整性。

以上是如何通过分组准确统计 LINQ 左连接中的子记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

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