首頁 > 後端開發 > C++ > 如何使用擴充方法在 LINQ 中執行左外連線?

如何使用擴充方法在 LINQ 中執行左外連線?

Linda Hamilton
發布: 2025-01-24 10:01:09
原創
302 人瀏覽過

How to Perform Left Outer Joins in LINQ Using Extension Methods?

使用LINQ擴充法執行左外連線

左外連接是一種聯結操作,它會傳回左側表(稱為「父」表)中的所有行,以及右側表(稱為「子」表)中僅符合的行。如果在子表中找不到符合的行,則父表中該行的傳回值為null。

在LINQ中,執行左外連接的一種方法是使用Join方法,該方法建立一個匿名類型的序列,其中包含父表和子表中的屬性。但是,實現相同結果的更便捷方法是使用GroupJoinSelectMany擴展方法。

使用擴充方法的左外連接語法如下:

<code class="language-csharp">var query = parentTable.GroupJoin(
    childTable, 
    parentKeySelector,
    childKeySelector,
    (parent, child) => new { Parent = parent, Child = child.DefaultIfEmpty() })
    .SelectMany(
        x => x.Child,
        (x, y) => new { Parent = x.Parent, Child = y });</code>
登入後複製

在此語法:

  • parentTablechildTable是要連接的表。
  • parentKeySelectorchildKeySelector是指定用於連接兩個表的鍵的lambda表達式。
  • GroupJoin方法中的匿名型別組合了父行和子行。
  • DefaultIfEmpty()方法確保對於沒有符合父行的子行回傳null值。
  • SelectMany方法將匿名類型的序列展平為單一序列,每個元素代表父表中的一行和對應的子行(如果不存在符合的子行,則為null)。

範例

考慮以下SQL中的左外連接查詢:

<code class="language-sql">SELECT f.*, b.*
FROM Foo f
LEFT JOIN Bar b ON f.Foo_Id = b.Foo_Id;</code>
登入後複製

可以使用擴充方法如下表示此查詢:

<code class="language-csharp">var query = Foo.GroupJoin(
    Bar, 
    f => f.Foo_Id,
    b => b.Foo_Id,
    (f, b) => new { Foo = f, Bar = b.DefaultIfEmpty() })
    .SelectMany(
        x => x.Bar,
        (f, b) => new { Foo = f.Foo, Bar = b });</code>
登入後複製

此查詢將傳回匿名類型的序列,其中每個類型都包含Foo和Bar表的屬性。如果Foo表中的一行在Bar表中沒有符合的行,則對應的Bar屬性將為null。

以上是如何使用擴充方法在 LINQ 中執行左外連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板