Heim >Backend-Entwicklung >C++ >Wie führe ich Left Outer Joins in LINQ mithilfe von Erweiterungsmethoden durch?
Verwenden Sie LINQ-Erweiterungsmethoden, um einen Left Outer Join durchzuführen
Ein Left Outer Join ist eine Join-Operation, die alle Zeilen in der Tabelle auf der linken Seite (die sogenannte „übergeordnete“ Tabelle) und nur die übereinstimmenden Zeilen in der Tabelle auf der rechten Seite (die sogenannte „untergeordnete“ Tabelle) zurückgibt. Wenn in der untergeordneten Tabelle keine passende Zeile gefunden wird, ist der Rückgabewert für diese Zeile in der übergeordneten Tabelle null.
In LINQ besteht eine Möglichkeit, einen Left Outer Join durchzuführen, darin, die Methode Join
zu verwenden, die eine anonyme typisierte Sequenz erstellt, die Attribute aus den übergeordneten und untergeordneten Tabellen enthält. Eine bequemere Möglichkeit, das gleiche Ergebnis zu erzielen, ist jedoch die Verwendung der Erweiterungsmethoden GroupJoin
und SelectMany
.
Die Syntax des linken äußeren Joins unter Verwendung von Erweiterungsmethoden lautet wie folgt:
<code class="language-csharp">var query = parentTable.GroupJoin( childTable, parentKeySelector, childKeySelector, (parent, child) => new { Parent = parent, Child = child.DefaultIfEmpty() }) .SelectMany( x => x.Child, (x, y) => new { Parent = x.Parent, Child = y });</code>
In dieser Syntax:
parentTable
und childTable
sind die zu verbindenden Tabellen. parentKeySelector
und childKeySelector
sind Lambda-Ausdrücke, die den Schlüssel angeben, der zum Verbinden der beiden Tabellen verwendet wird. GroupJoin
kombiniert übergeordnete und untergeordnete Zeilen. DefaultIfEmpty()
stellt sicher, dass für untergeordnete Zeilen, die keine passende übergeordnete Zeile haben, null zurückgegeben wird. SelectMany
reduziert eine Folge anonymer Typen zu einer einzigen Folge, wobei jedes Element eine Zeile in der übergeordneten Tabelle und die entsprechende untergeordnete Zeile darstellt (oder null, wenn keine passende untergeordnete Zeile vorhanden ist). Beispiel
Betrachten Sie die folgende Left-Outer-Join-Abfrage in SQL:
<code class="language-sql">SELECT f.*, b.* FROM Foo f LEFT JOIN Bar b ON f.Foo_Id = b.Foo_Id;</code>
Diese Abfrage kann mit einer Erweiterungsmethode wie folgt ausgedrückt werden:
<code class="language-csharp">var query = Foo.GroupJoin( Bar, f => f.Foo_Id, b => b.Foo_Id, (f, b) => new { Foo = f, Bar = b.DefaultIfEmpty() }) .SelectMany( x => x.Bar, (f, b) => new { Foo = f.Foo, Bar = b });</code>
Diese Abfrage gibt eine Folge anonymer Typen zurück, wobei jeder Typ Eigenschaften aus den Tabellen Foo und Bar enthält. Wenn eine Zeile in der Foo-Tabelle keine entsprechende Zeile in der Bar-Tabelle hat, ist die entsprechende Bar-Eigenschaft null.
Das obige ist der detaillierte Inhalt vonWie führe ich Left Outer Joins in LINQ mithilfe von Erweiterungsmethoden durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!