Linq-to-Entities: LEFT OUTER JOIN mit WHERE-Klausel und Projektion

8

Ich habe eine heckuva Zeit herauszufinden, wie man einen einfachen SQL LEFT OUTER JOIN mit einer where-Klausel mit zwei Bedingungen in eine funktionierende Linq-to-Entities-Abfrage übersetzt. Es gibt nur zwei Tabellen. Ich brauche Werte für alle Zeilen aus Tabelle1, unabhängig von Übereinstimmungen in Tabelle2, aber die WHERE-Klausel verwendet Felder aus Tabelle2. In SQL wären die beiden Parameter Table2WhereColumn1 und Table2WhereColumn2, und die Abfrage (die funktioniert) sieht so aus:

%Vor%

Ich habe versucht, Group Join mit DefaultIfEmpty() sowie einen impliziten Join (ohne das eigentliche Join Schlüsselwort) zu verwenden, und ich erhalte nur Zeilen für Elemente mit Werten in Table2. Ich bin sicher, das wird nicht helfen, aber hier ist ein Beispiel für die Linq, die ich versucht habe, die nicht funktioniert:

%Vor%     
AJ. 18.10.2010, 14:03
quelle

3 Antworten

10

Gehen Sie auf diese Fragen ein und sagen Sie mir, ob sie für Sie arbeiten. Ich habe die Daten nicht zum Testen eingerichtet, aber sie sollten in Ordnung sein.

Bitte entschuldigen Sie meinen Mix aus C # & amp; VB.NET. Ich war früher ein VB.NET-Entwickler, aber in den letzten Jahren habe ich hauptsächlich in C # gearbeitet, also fühle ich mich jetzt wohler.

Hier sind die Klassen, die ich für Table1 & amp; Table2 :

%Vor%

Nun sollte die Abfrage in C # lauten:

%Vor%

Und die Übersetzung in VB.NET:

%Vor%

Lass es mich wissen, wenn sie arbeiten. Daumen drücken. : -)

    
Enigmativity 18.10.2010, 14:53
quelle
3

Persönlich, wenn es Bedingungen für die rechte Seite eines linken Joins gibt, ziehe ich es im Allgemeinen vor, sie in das Join-Kriterium

aufzunehmen

In diesem Fall würde das SQL wie folgt aussehen:

%Vor%

Der LINQ-Code dafür (in C #) würde wie folgt aussehen:

%Vor%

nicht getestet - aber sollte funktionieren

    
James S 07.06.2013 10:29
quelle
0

Ich werde keine Anerkennung für diese Antwort bekommen, aber es ist großartig: LINQ to SQL - Left Outer Join mit mehreren Join-Bedingungen

Verwenden Sie im Wesentlichen die where-Klausel der Erweiterungsmethode für die Unterabfrage, aber Sie müssen sie vor DefaultIfEmpty() :

verwenden %Vor%     
Kristopher 23.10.2017 19:37
quelle