Heim >Backend-Entwicklung >C++ >Wie kann ich einen Mehrfeld-Join in einer einzelnen LINQ-Abfrage durchführen?
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!