Heim > Backend-Entwicklung > C++ > Wie implementiert man einen Left Outer Join mit mehreren Bedingungen in LINQ to SQL?

Wie implementiert man einen Left Outer Join mit mehreren Bedingungen in LINQ to SQL?

DDD
Freigeben: 2024-12-31 01:05:09
Original
345 Leute haben es durchsucht

How to Implement a Left Outer Join with Multiple Conditions in LINQ to SQL?

Implementieren von Left Outer Join mit mehreren Join-Bedingungen in LINQ to SQL

In Situationen, in denen der Zugriff auf Daten das Verknüpfen mehrerer Tabellen mit angegebenen Bedingungen erfordert, bietet LINQ to SQL ein wirksames Mittel solche Operationen durchzuführen. Dieser Artikel befasst sich mit einem bestimmten Szenario, in dem zum Abrufen von Daten ein Left Outer Join mit mehreren Join-Bedingungen erforderlich ist.

Erste Abfrage und Herausforderung

Betrachten Sie die folgende 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

Die Aufgabe besteht darin, diese Abfrage in einen LINQ-Ausdruck zu übersetzen. Während es in LINQ Standardmethoden für die Durchführung von Left-Outer-Joins gibt (z. B. mit DefaultIfEmpty()), stellt die Einbindung der zusätzlichen Join-Bedingung f.otherid = 17 eine Herausforderung dar.

Lösung: Platzieren der Join-Bedingung Vor DefaultIfEmpty()

Der Schlüssel zur Bewältigung dieser Herausforderung besteht darin, die Join-Bedingung vor dem Aufruf einzuführen DefaultIfEmpty(). Dies kann entweder mithilfe der Syntax der Erweiterungsmethode oder einer Unterabfrage erreicht werden:

// Using extension method syntax
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;

// Using a subquery
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

Erläuterung der Platzierung der Join-Bedingung

Die Bedingung AND f.otherid = 17 ist Teil davon den Join, da er sicherstellt, dass nur Zeilen aus der Faktentabelle, die diese Bedingung erfüllen, mit den entsprechenden Zeilen aus der Periodentabelle verknüpft werden. Durch Platzieren dieser Bedingung in der WHERE-Klausel nach dem Join würden alle Zeilen aus der Periodentabelle ausgeschlossen, die keine übereinstimmende Zeile in der Faktentabelle haben, selbst wenn diese Zeilen andernfalls die Bedingung erfüllen würden. Durch die Angabe der Bedingung im Join bewahren wir das gewünschte Verhalten.

Das obige ist der detaillierte Inhalt vonWie implementiert man einen Left Outer Join mit mehreren Bedingungen in LINQ to SQL?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage