Heim >Backend-Entwicklung >C++ >Wie führe ich einen LINQ to SQL Left Outer Join mit Filterung mit mehreren Bedingungen durch?
LINQ to SQL Left Outer Join mit Multibedingungsfilterung
In LINQ to SQL ermöglicht ein Left Outer Join den Abruf aller Datensätze aus der linken Tabelle, auch wenn in der rechten Tabelle keine übereinstimmenden Datensätze vorhanden sind. Bei der Abfrage mit einem Left Outer Join kann es notwendig werden, zusätzliche Filterbedingungen auf die verbundene Tabelle anzuwenden.
Beachten Sie die folgende SQL-Anweisung:
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 ruft den Wert aus ab „facts“-Tabelle für jeden Datensatz in der „period“-Tabelle, auch wenn es keinen passenden Datensatz in der „facts“-Tabelle gibt. Darüber hinaus wird ein weiterer Filter angewendet, um nur Datensätze einzuschließen, bei denen die Spalte „otherid“ in der Tabelle „facts“ gleich 17 ist.
Um diese Abfrage in LINQ zu übersetzen, können die folgenden Schritte ausgeführt werden:
var query = 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;
Der Hauptunterschied zu einem Standard-Left-Outer-Join liegt in der Verwendung der Where()-Methode für die verbundene Tabelle „fg“ vor dem Aufruf von DefaultIfEmpty(). Dadurch wird sichergestellt, dass die zusätzliche Filterbedingung angewendet wird, bevor möglicherweise Datensätze aufgrund eines leeren Join-Ergebnisses ausgeschlossen werden.
Ein alternativer Ansatz beinhaltet die Verwendung einer Unterabfrage:
var query = 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 dieser Ansätze erreichen das gewünschtes Ergebnis der Durchführung eines Left Outer Joins mit mehreren Join-Bedingungen. Es ist wichtig zu verstehen, dass die Platzierung der zusätzlichen Filterbedingung in der WHERE-Klausel nach dem JOIN möglicherweise nicht zum gewünschten Verhalten führt, da dies zum Ausschluss von Datensätzen führen könnte, die aufgrund des linken äußeren Joins einbezogen werden sollten.
Das obige ist der detaillierte Inhalt vonWie führe ich einen LINQ to SQL Left Outer Join mit Filterung mit mehreren Bedingungen durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!