首頁 > 資料庫 > mysql教程 > 如何在 LINQ to SQL 中執行具有多個條件的左外連線?

如何在 LINQ to SQL 中執行具有多個條件的左外連線?

Patricia Arquette
發布: 2025-01-12 09:58:41
原創
475 人瀏覽過

How to Perform a Left Outer Join with Multiple Conditions in LINQ to SQL?

LINQ to SQL:掌握具有多個條件的左外連線

將 SQL 查詢轉換為 LINQ to SQL 可能很棘手,尤其是對於複雜的聯結。本文重點討論一個常見場景:執行具有多個條件的左外連接。

SQL 挑戰:

我們的起點是在「period」表和「facts」表之間使用左外連接的 SQL 查詢。 連線使用兩個條件:「p.id = f.periodid」和「f.otherid = 17」。第二個條件充當過濾器。

LINQ 障礙:

LINQ 的 DefaultIfEmpty() 方法是左外連接的常用方法。然而,簡單地將 'f.otherid = 17' 加到 where 子句 after 連線無法如預期運作。

有效的 LINQ 解:

關鍵是使用之前應用第二個連接條件DefaultIfEmpty()。 這裡有兩個有效的方法:

方法一:使用擴充方法語法:

from p in context.Periods
join f in context.Facts on p.id equals f.periodid into fg
from fgi in fg.Where(f => f.otherid == 17).DefaultIfEmpty()
where p.companyid == 100
select fgi.value
登入後複製

方法 2:使用子查詢:

from p in context.Periods
join f in context.Facts on p.id equals f.periodid into fg
from fgi in (from f in fg
             where f.otherid == 17
             select f).DefaultIfEmpty()
where p.companyid == 100
select fgi.value
登入後複製

為什麼有效:

關鍵的區別在於條件的位置。 將 'f.otherid == 17' 放在 where 子句 after DefaultIfEmpty() 中將過濾掉 'f' 為 null 的行(因為連線未找到符合項目)。 透過將其放在 Where() 子句 before DefaultIfEmpty() 中,我們在引入 null 值之前過濾 before,確保正確的左外連接行為。 請注意,我們選擇 fgi.value 而不是 f.value 來正確處理第一個方法中的空值。

以上是如何在 LINQ to SQL 中執行具有多個條件的左外連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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