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
Freigeben: 2024-12-29 20:02:15
Original
528 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage