Heim >Backend-Entwicklung >C++ >Wie kann ich in LINQ to SQL einen Left Outer Join mit mehreren Join-Bedingungen durchführen?

Wie kann ich in LINQ to SQL einen Left Outer Join mit mehreren Join-Bedingungen durchführen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-29 20:02:15565Durchsuche

How Can I Perform a Left Outer Join with Multiple Join Conditions in LINQ to SQL?

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!

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