LINQ to SQL:左连接、分组依据和计数
此示例演示如何使用 LINQ to SQL 执行左联接、分组依据和计数操作,镜像特定 SQL 查询的功能。
SQL 查询:
以下 SQL 查询作为我们 LINQ 翻译的目标:
<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>
此查询连接 ParentTable
和 ChildTable
,计算每个父级的子记录,并处理父级没有子级的情况(使用 LEFT OUTER JOIN
)。
LINQ to SQL 等效项:
等效的 LINQ to SQL 查询使用 join
子句、DefaultIfEmpty()
进行左连接行为 group by
以及带有谓词的 Count()
方法以仅对非空子 ID 进行计数:
<code class="language-csharp">var query = 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, ChildCount = grouped.Count(t => t.ChildId != null) };</code>
此 LINQ 查询实现与 SQL 查询相同的结果。 into j1
和 from j2 in j1.DefaultIfEmpty()
组合正确实现了左外连接。 group by
子句按 ParentId
对结果进行分组,而 Count()
方法使用条件 (t => t.ChildId != null
) 确保仅对现有子记录进行计数。 匿名类型 new { ParentId, ChildCount }
创建最终结果集。
这清晰简洁地将 SQL 查询的逻辑转换为可读且可维护的 LINQ 表达式。
以上是如何使用 LINQ to SQL 执行左连接、分组和计数?的详细内容。更多信息请关注PHP中文网其他相关文章!