在存取資料涉及使用指定條件聯接多個表的情況下,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中文網其他相關文章!