使用LINQ实现左连接、分组和非空子记录计数
在SQL中,以下查询在ParentTable和ChildTable两个表之间执行左连接,并计算与每个父记录关联的子记录数量:
SELECT p.ParentId, COUNT(c.ChildId) FROM ParentTable p LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId GROUP BY p.ParentId
将此查询转换为LINQ to SQL可以使用以下步骤:
Join
和DefaultIfEmpty
方法执行左连接: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() }
然而,上述代码将返回每个父记录的子记录总数,包括空值。要仅计算非空子记录,请修改Count
表达式如下:
select new { ParentId = grouped.Key, Count = grouped.Where(t => t.ChildId != null).Count() }
这将确保仅计算ChildId
不为空的子记录。 最终的LINQ查询将准确反映SQL查询的逻辑,并有效地统计非空子记录。
以上是如何使用 LINQ 执行左连接、分组和计算非空子记录?的详细内容。更多信息请关注PHP中文网其他相关文章!