2017-05-14 2 views
2

ich diesen Code bei LINQ - Full Outer Join gefunden:Implementierung Differenz zwischen dem linken äußeren Verknüpfung und rechte äußere Verknüpfung in LINQ

var leftOuterJoin = from first in firstNames 
        join last in lastNames 
        on first.ID equals last.ID 
        into temp 
        from last in temp.DefaultIfEmpty(new { first.ID, Name = default(string) }) 
        select new 
        { 
         first.ID, 
         FirstName = first.Name, 
         LastName = last.Name, 
        }; 
var rightOuterJoin = from last in lastNames 
        join first in firstNames 
        on last.ID equals first.ID 
        into temp 
        from first in temp.DefaultIfEmpty(new { last.ID, Name = default(string) }) 
        select new 
        { 
         last.ID, 
         FirstName = first.Name, 
         LastName = last.Name, 
        }; 

Die Antwort mit diesem Code eine Menge upvotes bekam, aber ich beobachte hier etwas nicht stimmt. Im linken äußeren Join verwendet es into und from mit der zweiten Entität, in der rechten äußeren Verknüpfung tut es das gleiche. Beide Implementierungen scheinen mir also gleich zu sein. Können Sie mir den Unterschied zwischen linker äußerer Verbindung und rechter äußerer Verbindung erklären? Danke im Voraus.

EDIT:

denke ich, rechte äußere Verknüpfung sollte wie folgt sein:

var rightOuterJoin = from first in firstNames 
        join last in lastNames 
        on first.ID equals last.ID 
        into temp 
        from first in temp.DefaultIfEmpty(new { last.ID, Name = default(string) }) 
        select new 
        { 
         last.ID, 
         FirstName = first.Name, 
         LastName = last.Name, 
        }; 
+0

Es tut das gleiche auf dieser Website: http://www.dotnetfunda.com/codes/show/1849/how-to-use-left-right-outer-join-in-linq Ich kann wirklich nicht sehen ein Unterschied :( – jason

+1

Ich verstehe die Frage nicht. Die Art, wie Sie links etwas in ein Recht etwas drehen Sie tauschen die linken und rechten Dinge. Was ist hier getan worden. Warum denken Sie, das ist falsch? –

+0

'temp' Variable ist vom Typ' IEnumerable 'in linken Join, ist aber vom Typ' IEnumerable 'in rechts, also gibt es einen Unterschied. – Evk

Antwort

1

Hier ist eine visuelle Erklärung der verschiedenen Arten von Joins.

Visual Representation of Joins

Der wesentliche Unterschied besteht darin, dass LEFT werden alle Datensätze aus der ersten Tabelle halten (oder linke Tabelle), während RECHTS alle Datensätze aus der zweiten Tabelle zu halten.

OUTER gibt Zeilen zurück, selbst wenn NULL-Werte im Datensatz gefunden werden.

+0

Ja, ich kenne dieses Diagramm, aber das beantwortet meine Frage nicht. Was ist anders in ** Implementierung**? Ist der obige Code korrekt, wenn ja wie? Wenn nicht wie? – jason

Verwandte Themen