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

如何在 LINQ to SQL 中執行具有多個聯結條件的左外聯接?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-12 06:14:47472瀏覽

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

LINQ to SQL:使用多個連線條件執行左外連線

LINQ to SQL 允許您使用多個連接條件執行左外連接,從多個表中檢索數據,即使右側表中沒有對應的行,也能包含左側表中的行。

要實現具有多個連接條件的左外連接,您需要先建立主要的連接條件,這通常是表主鍵之間的關係。一旦您有了主要的連接,就可以添加額外的連接條件來進一步篩選結果。

您提供的範例 SQL 查詢:

<code class="language-sql">SELECT f.value
FROM period as p
LEFT OUTER JOIN facts AS f ON p.id = f.periodid AND f.otherid = 17
WHERE p.companyid = 100</code>

根據 'companyid' 篩選 'period' 表中的行,並根據 'id' 和 'otherid' 連接條件從 'facts' 表中檢索對應的 'value'。

要將此查詢轉換為 LINQ,您需要使用 Join() 方法和 DefaultIfEmpty() 方法來處理外連接。給定 SQL 查詢的正確 LINQ 實作如下:

<code class="language-csharp">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 f.value</code>

Where() 子句用於對 otherid 應用附加連接條件。 DefaultIfEmpty() 方法確保即使右側表格中沒有相符的行,也能包含左側表格中的行。

或者,您可以使用子查詢:

<code class="language-csharp">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 f.value</code>

這兩種方法都與提供的 SQL 查詢產生相同的結果。透過遵循這些步驟,您可以有效地在 LINQ to SQL 中使用多個連線條件執行左外連線。

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

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