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

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-12 06:14:47401Durchsuche

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

LINQ to SQL: Führen Sie einen linken äußeren Join mit mehreren Join-Bedingungen durch

LINQ to SQL ermöglicht Ihnen die Durchführung eines Left Outer Join unter Verwendung mehrerer Join-Bedingungen, um Daten aus mehreren Tabellen abzurufen, einschließlich Zeilen aus der linken Tabelle, selbst wenn in der rechten Tabelle keine entsprechenden Zeilen vorhanden sind.

Um einen Left Outer Join mit mehreren Join-Bedingungen zu implementieren, müssen Sie zunächst die Haupt-Join-Bedingung festlegen, bei der es sich normalerweise um die Beziehung zwischen den Primärschlüsseln der Tabelle handelt. Sobald Sie Ihren Haupt-Join erstellt haben, können Sie zusätzliche Join-Bedingungen hinzufügen, um die Ergebnisse weiter zu filtern.

Beispiel-SQL-Abfrage, die Sie bereitgestellt haben:

<code class="language-sql">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</code>

Filtern Sie die Zeilen in der Tabelle „Periode“ basierend auf „Unternehmens-ID“ und rufen Sie den entsprechenden „Wert“ aus der Tabelle „Fakten“ basierend auf den Join-Bedingungen „ID“ und „AndereID“ ab.

Um diese Abfrage in LINQ zu konvertieren, müssen Sie die Methode Join() und die Methode DefaultIfEmpty() verwenden, um äußere Verknüpfungen zu verarbeiten. Die korrekte LINQ-Implementierung für eine bestimmte SQL-Abfrage ist:

<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 f.value</code>
Die

Where()-Klausel wird verwendet, um zusätzliche Join-Bedingungen auf otherid anzuwenden. Die Methode DefaultIfEmpty() stellt sicher, dass Zeilen aus der linken Tabelle einbezogen werden, auch wenn in der rechten Tabelle keine passenden Zeilen vorhanden sind.

Alternativ können Sie eine Unterabfrage 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 (from f in fg
             where f.otherid == 17
             select f).DefaultIfEmpty()
where p.companyid == 100
select f.value</code>

Beide Methoden liefern die gleichen Ergebnisse wie die bereitgestellte SQL-Abfrage. Wenn Sie diese Schritte befolgen, können Sie mithilfe mehrerer Join-Bedingungen in LINQ to SQL effizient einen Left Outer Join durchführen.

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