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中文網其他相關文章!