Heim >Backend-Entwicklung >C++ >Wie kann ich einen Mehrfeld-Join in einer einzelnen LINQ-Abfrage durchführen?

Wie kann ich einen Mehrfeld-Join in einer einzelnen LINQ-Abfrage durchführen?

Susan Sarandon
Susan SarandonOriginal
2025-01-24 02:22:09347Durchsuche

How Can I Perform a Multi-Field Join in a Single LINQ Query?

Einzelabfrage-Mehrfeld-Join in LINQ

Beim Durchführen von Verknüpfungsvorgängen in LINQ müssen Sie normalerweise Tabellen in mehreren Feldern gleichzeitig verknüpfen. Obwohl es möglich ist, mithilfe der where-Klausel zusätzliche Einschränkungen zu einem Join hinzuzufügen, ist dies nicht immer der effizienteste oder lesbarste Ansatz.

Um mehrere Felder in einer einzigen Verbindung zu verbinden, können anonyme Typen verwendet werden. Der folgende Code verbindet beispielsweise die Tabellen field1 und field2 basierend auf den Feldern entity und entity2:

<code class="language-csharp">var result = from x in entity
             join y in entity2 on new { x.field1, x.field2 } equals new { y.field1, y.field2 }
             select new { x, y }; // 选择结果</code>

In diesem Beispiel werden die anonymen Typen new { x.field1, x.field2 } und new { y.field1, y.field2 } verwendet, um einen neuen Typ zu erstellen, der nur die für den Join verwendeten Felder enthält. Diese Wertetypen werden dann mit dem Operator equals verglichen, um die Verknüpfung durchzuführen. Schließlich wählt die select new {x, y}-Anweisung das verkettete Ergebnis aus, das Daten aus entity und entity2 enthält.

Es ist wichtig zu beachten, dass die in anonymen Typen verwendeten Felder kompatibel sein müssen, das heißt, sie müssen vom gleichen Typ sein, und wenn eines der Felder nullbar ist, muss es nullbar sein. Wenn die Felder nicht kompatibel sind, wird eine Ausnahme ausgelöst.

Während dieser Ansatz für einen Equijoin funktioniert, ist es möglich, komplexere Joins durchzuführen, indem man einen benutzerdefinierten Gleichheitskomparator oder zusätzliche Join-Klauseln verwendet. Der folgende Code führt beispielsweise einen Non-Equijoin für die Tabellen entity und entity2 mithilfe eines benutzerdefinierten Gleichheitskomparators durch:

<code class="language-csharp">var result = from x in entity
             join y in entity2 on new { x.field1, x.field2 } equals new { y.field1, y.field2 } into gj
             from y in gj.DefaultIfEmpty()
             where y == null || y.field3 == x.field4
             select new { x, y }; // 选择结果</code>

In diesem Beispiel wird ein benutzerdefinierter Gleichheitskomparator verwendet, um die Werte der Felder field3 und field4 zu vergleichen. Wenn die Werte nicht gleich sind, wird die Verknüpfung trotzdem durchgeführt, der Wert von y ist jedoch null.

Indem Sie lernen, wie Sie anonyme Typen und benutzerdefinierte Gleichheitskomparatoren verwenden, können Sie LINQ verwenden, um eine Vielzahl von Verknüpfungen durchzuführen, einschließlich Verknüpfungen für mehrere Felder. Denken Sie daran, „Endergebnis“ auszuwählen, um die verketteten Daten zu erhalten.

Das obige ist der detaillierte Inhalt vonWie kann ich einen Mehrfeld-Join in einer einzelnen LINQ-Abfrage durchführen?. 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