Heim >Backend-Entwicklung >C++ >Wie führe ich Left Outer Joins in LINQ mithilfe von Erweiterungsmethoden durch?

Wie führe ich Left Outer Joins in LINQ mithilfe von Erweiterungsmethoden durch?

Linda Hamilton
Linda HamiltonOriginal
2025-01-24 10:01:09254Durchsuche

How to Perform Left Outer Joins in LINQ Using Extension Methods?

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.
  • Der anonyme Typ in der Methode
  • GroupJoin kombiniert übergeordnete und untergeordnete Zeilen.
  • Die Methode
  • DefaultIfEmpty() stellt sicher, dass für untergeordnete Zeilen, die keine passende übergeordnete Zeile haben, null zurückgegeben wird.
  • Die Methode
  • 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn