首頁 >後端開發 >C++ >如何使用 LINQ 執行左連線、分組和計算非空子記錄?

如何使用 LINQ 執行左連線、分組和計算非空子記錄?

Linda Hamilton
Linda Hamilton原創
2025-01-08 20:01:43564瀏覽

How to Perform a Left Join, Group By, and Count Non-Null Child Records using LINQ?

使用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可以使用以下步驟:

  1. 使用JoinDefaultIfEmpty方法執行左連接:
<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>
  1. 依父ID分組結果:
<code class="language-csharp">group j2 by p.ParentId into grouped</code>
  1. 統計與每個父記錄關聯的子記錄數量:
<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn