LINQ to SQL: Left Outer Joins mit mehreren Join-Bedingungen verbessern
In LINQ to SQL bieten Left Outer Joins einen leistungsstarken Mechanismus zum Kombinieren Daten aus mehreren Tabellen. Wenn es jedoch um Szenarien mit zusätzlichen Join-Bedingungen geht, ist es notwendig, Techniken zu erkunden, die den Standardansatz erweitern.
Betrachten Sie die 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
Diese Abfrage versucht, Daten abzurufen die Tabellen „period“ und „facts“, indem ein linker äußerer Join auf die Spalten „id“ und „periodid“ angewendet wird. Darüber hinaus enthält es eine weitere Join-Bedingung, „f.otherid = 17“, um die Ergebnisse zu filtern.
In LINQ to SQL umfasst die typische Implementierung eines linken äußeren Joins die Verwendung der Methode „DefaultIfEmpty()“. . Um jedoch die zusätzliche Join-Bedingung zu berücksichtigen, müssen wir unseren Ansatz ändern.
Die folgende LINQ-Abfrage erzielt das gewünschte Ergebnis:
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
Hier führen wir die zusätzliche Join-Bedingung innerhalb ein „.Where()“-Klausel, die sicherstellt, dass die Auswahl von Zeilen aus der „fg“-Gruppierung basierend auf „f.otherid =“ gefiltert wird 17'.
Alternativ könnten wir eine Unterabfrage verwenden:
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
Beide Ansätze führen erfolgreich einen Left Outer Join durch und wenden gleichzeitig die zusätzliche Join-Bedingung an, was einen gezielteren Abruf von Daten ermöglicht.
Das obige ist der detaillierte Inhalt vonWie kann ich in LINQ to SQL einen Left Outer Join mit mehreren Join-Bedingungen durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!