使用 LINQ 的左外連接擴展方法
在 LINQ 中執行外連接可以使用 Join
和 DefaultIfEmpty
方法的組合來實現。但是,為了提高代碼的可讀性和簡潔性,擴展方法提供了一種更方便的方式來表達這些操作。
使用擴展方法執行左外連接,請考慮以下語法:
<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中文網其他相關文章!