Heim > Datenbank > MySQL-Tutorial > Wie führe ich einen Left Outer Join mit mehreren Bedingungen in LINQ to SQL durch?

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

Patricia Arquette
Freigeben: 2025-01-12 09:58:41
Original
421 Leute haben es durchsucht

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

LINQ to SQL: Left Outer Joins mit mehreren Kriterien beherrschen

Das Übersetzen von SQL-Abfragen in LINQ to SQL kann schwierig sein, insbesondere bei komplexen Verknüpfungen. Dieser Artikel konzentriert sich auf ein häufiges Szenario: die Durchführung eines Left Outer Joins mit mehreren Bedingungen.

Die SQL-Herausforderung:

Unser Ausgangspunkt ist eine SQL-Abfrage, die einen linken äußeren Join zwischen den Tabellen „Periode“ und „Fakten“ verwendet. Der Join verwendet zwei Bedingungen: „p.id = f.periodid“ und „f.otherid = 17“. Die zweite Bedingung fungiert als Filter.

Die LINQ-Hürde:

LINQs DefaultIfEmpty()-Methode ist der übliche Ansatz für Left Outer Joins. Das einfache Hinzufügen von „f.otherid = 17“ zu einer where-Klausel nach der Verknüpfung funktioniert jedoch nicht wie erwartet.

Effektive LINQ-Lösungen:

Der Schlüssel besteht darin, die zweite Join-Bedingung anzuwenden, bevor DefaultIfEmpty() verwendet wird. Hier sind zwei effiziente Methoden:

Methode 1: Syntax der Erweiterungsmethode verwenden:

<code class="language-csharp">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 fgi.value</code>
Nach dem Login kopieren

Methode 2: Verwendung einer Unterabfrage:

<code class="language-csharp">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 fgi.value</code>
Nach dem Login kopieren

Warum das funktioniert:

Der entscheidende Unterschied liegt in der Platzierung der Erkrankung. Das Einfügen von „f.otherid == 17“ in die where-Klausel after DefaultIfEmpty() würde Zeilen herausfiltern, in denen „f“ null ist (da der Join keine Übereinstimmung gefunden hat). Indem wir es in die Where()-Klausel vor DefaultIfEmpty() einfügen, filtern wir bevor die Nullwerte eingeführt werden, um das korrekte Verhalten des linken äußeren Joins sicherzustellen. Beachten Sie, dass wir fgi.value anstelle von f.value auswählen, um Nullen in der ersten Methode korrekt zu verarbeiten.

Das obige ist der detaillierte Inhalt vonWie führe ich einen Left Outer Join mit mehreren Bedingungen in LINQ to SQL durch?. 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