Heim >Datenbank >MySQL-Tutorial >Wie führe ich einen Left Outer Join mit mehreren Join-Bedingungen in LINQ to SQL durch?
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!