使用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可以使用以下步骤:
Join
和DefaultIfEmpty
方法执行左连接:<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>
<code class="language-csharp">group j2 by p.ParentId into grouped</code>
<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中文网其他相关文章!