首頁 > 後端開發 > C++ > 擴展方法如何簡化LINQ中的左外連接?

擴展方法如何簡化LINQ中的左外連接?

Barbara Streisand
發布: 2025-01-24 10:12:10
原創
690 人瀏覽過

How Can Extension Methods Simplify Left Outer Joins in LINQ?

使用 LINQ 的左外連接擴展方法

在 LINQ 中執行外連接可以使用 JoinDefaultIfEmpty 方法的組合來實現。但是,為了提高代碼的可讀性和簡潔性,擴展方法提供了一種更方便的方式來表達這些操作。

使用擴展方法執行左外連接,請考慮以下語法:

<code class="language-csharp">Foo.GroupJoin(Bar, f => f.Foo_Id, b => b.Foo_Id, (f,b) => ...)
    .Select(...)</code>
登入後複製

在此語法中:

  • GroupJoin 根據鍵選擇器對第一個序列 (Foo) 中的元素進行分組,並使用兼容的鍵選擇器將其與第二個序列 (Bar) 連接。
  • 結果是一個元組的可枚舉集合,其中每個元組包含第一個序列中的一個元素和第二個序列中元素的分組可枚舉集合。
  • SelectMany 用於展平分組的元素並將它們與第一個序列組合。
  • DefaultIfEmpty 用於確保如果第二個序列中沒有匹配的元素,則返回默認值。

要完成左外連接,剩下的步驟是對組合的元素執行選擇。在這種情況下,可以使用 Select 方法來投影每個元組的所需屬性。

例如,要在 Foo 和 Bar 之間根據 Foo_Id 列表達左外連接,可以使用以下代碼:

<code class="language-csharp">var qry = Foo.GroupJoin(
          Bar, 
          foo => foo.Foo_Id, 
          bar => bar.Foo_Id,
          (x,y) => new { Foo = x, Bars = y })
       .SelectMany(
           x => x.Bars.DefaultIfEmpty(),
           (x,y) => new { Foo=x.Foo, Bar=y});</code>
登入後複製

此代碼生成一個匿名類型的可枚舉集合,其中每個類型都包含來自 Foo 表的 Foo 屬性和來自 Bar 表的 Bar 屬性(如果不存在匹配的 bar,則為 null)。

以上是擴展方法如何簡化LINQ中的左外連接?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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