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

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

Barbara Streisand
Barbara Streisand原创
2025-01-08 20:31:55321浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn