Heim >Backend-Entwicklung >C++ >Wie führe ich einen LINQ to SQL Left Outer Join mit mehreren Join-Bedingungen durch?
LINQ to SQL: Left Outer Join mit mehreren Join-Bedingungen
In LINQ to SQL werden SQL-Abfragen übersetzt, die Left Outer Joins mit mehreren Join-Bedingungen beinhalten Die Bedingungen können herausfordernd sein. Dieser Artikel befasst sich mit einem Szenario, in dem eine SQL-Abfrage mit einem Left Outer Join und einer zusätzlichen Join-Bedingung in LINQ konvertiert werden muss.
SQL-Abfrage
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-Übersetzung
Die typische LINQ-Implementierung eines Left Outer Joins mit DefaultIfEmpty() kann unkompliziert sein, beinhaltet aber das Zusätzliche Die Join-Bedingung erfordert eine sorgfältige Überlegung.
Der folgende erste Versuch ist zwar syntaktisch korrekt, führt jedoch nicht zum gewünschten Ergebnis:
from p in context.Periods join f in context.Facts on p.id equals f.periodid into fg from fgi in fg.DefaultIfEmpty() where p.companyid == 100 && fgi.otherid == 17 select f.value
Um das gewünschte Verhalten zu erreichen, muss die zusätzliche Join-Bedingung eingeführt werden bevor Sie DefaultIfEmpty() aufrufen. Dies wird entweder mithilfe der Erweiterungsmethodensyntax oder einer Unterabfrage erreicht:
Erweiterungsmethodensyntax
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
Unterabfrage
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
Das obige ist der detaillierte Inhalt vonWie führe ich einen LINQ to SQL Left Outer Join mit mehreren Join-Bedingungen durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!