LINQ to SQL:左連接、分組依據和計數
此範例示範如何使用 LINQ to SQL 執行左聯結、分組依據和計數操作,鏡像特定 SQL 查詢的功能。
SQL 查詢:
以下 SQL 查詢作為我們 LINQ 翻譯的目標:
SELECT p.ParentId, COUNT(c.ChildId) FROM ParentTable p LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId GROUP BY p.ParentId
此查詢連接 ParentTable
和 ChildTable
,計算每個父級的子記錄,並處理父級沒有子級的情況(使用 LEFT OUTER JOIN
)。
LINQ to SQL 等效項:
等效的 LINQ to SQL 查詢使用 join
子句、DefaultIfEmpty()
進行左連接行為 group by
以及帶有謂詞的 Count()
方法以僅對非空子 ID 進行計數:
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) };
此 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中文網其他相關文章!