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