首頁 > 後端開發 > C++ > 如何在 LINQ to SQL 中實現具有多個條件的左外連接?

如何在 LINQ to SQL 中實現具有多個條件的左外連接?

DDD
發布: 2024-12-31 01:05:09
原創
345 人瀏覽過

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

在LINQ to SQL 中實現具有多個聯接條件的左外聯

在存取資料涉及使用指定條件聯接多個表的情況下,LINQ to SQL 提供了一種有效的手段來執行此類操作。本文深入研究了需要具有多個聯結條件的左外聯來檢索資料的特定場景。

初始查詢和挑戰

考慮以下 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
登入後複製

任務是將此查詢轉換為 LINQ 表達式。雖然在 LINQ 中有執行左外連接的標準方法(例如,使用 DefaultIfEmpty()),但合併附加連接條件 f.otherid = 17 提出了挑戰。

解決方案:放置連接條件在 DefaultIfEmpty()

解決此挑戰的關鍵是在調用之前引入連接條件DefaultIfEmpty()。這可以使用擴展方法語法或子查詢來實現:

// Using extension method syntax
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;

// Using a subquery
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;
登入後複製

連接條件放置的說明

AND f.otherid = 17 條件是連接,因為它確保只有事實表中符合此條件的行才會與週期表中的對應行連接。將此條件放在連接後的 WHERE 子句中,將從週期表中排除在事實表中沒有任何符合行的行,即使這些行本來可以滿足條件。透過在連線中指定條件,我們保留了所需的行為。

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

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