Heim >Backend-Entwicklung >C++ >Wie führe ich einen linken äußeren Join in Linq aus, ohne Join-on-Equals-Into-Klauseln zu verwenden?
C# Linq linker Außenjoin: Ein alternativer Ansatz
Dieser Artikel zeigt, wie ein linker Außenjoin in LINQ an Objekte durchgeführt wird, ohne die herkömmliche join-on-equals-into
-Klausel zu verwenden. Wir nutzen die Operatoren from
und join
in Verbindung mit DefaultIfEmpty()
für eine kurze und effiziente Lösung.
Hier ist die alternative Syntax:
<code class="language-csharp">var q = from l in lefts join r in rights on l.Key equals r.Key into ps_jointable from p in ps_jointable.DefaultIfEmpty() select new JoinPair { LeftId = l.Id, RightId = p?.Id ?? 0 };</code>
Diese Linq -Abfrage führt einen linken äußeren Join auf den Kollektionen lefts
und rights
aus, wodurch eine neue Sammlung von JoinPair
Objekten generiert wird. Für jeden Artikel in lefts
versucht es, ein passendes Element in rights
basierend auf der Eigenschaft Key
zu finden. Wenn ein Match vorhanden ist, hält RightId
in JoinPair
das Id
des übereinstimmenden rights
-Olement. Wenn keine Übereinstimmung gefunden wird, wird RightId
mit dem Null-Conditional-Operator (?.
) und dem Null-Koalescing-Operator (??
) standardmäßig 0 ausgewiesen.
DefaultIfEmpty()
Die rights
-Methode ist wesentlich. Es stellt sicher, dass ein Ergebnis produziert wird, auch wenn in der DefaultIfEmpty()
-Kollektion keine Übereinstimmungen gefunden werden. In Abwesenheit eines Matchs gibt join-on-equals-into
in diesem Fall einen Standardwert zurück (in diesem Fall Null), der dann von den Null-Conditional- und Null-Koalescing-Operatoren anmutig behandelt wird. Dieser Ansatz bietet eine lesbarere und potenziell leistungsfähigere Alternative zur Standard
Das obige ist der detaillierte Inhalt vonWie führe ich einen linken äußeren Join in Linq aus, ohne Join-on-Equals-Into-Klauseln zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!