掌握 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中文網其他相關文章!