Heim >Backend-Entwicklung >C++ >Wie führe ich einen LINQ to SQL Left Outer Join mit Filterung mit mehreren Bedingungen durch?

Wie führe ich einen LINQ to SQL Left Outer Join mit Filterung mit mehreren Bedingungen durch?

DDD
DDDOriginal
2025-01-04 08:48:34861Durchsuche

How to Perform a LINQ to SQL Left Outer Join with Multi-Condition Filtering?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn