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