LINQ implementiert kartesisches Produkt
Angenommen, Sie haben eine Klassenstruktur, in der eine Person mehrere Hunde besitzt und jeder Hund mehrere Welpen hat, und Sie möchten eine LINQ-Lösung finden, um alle möglichen Kombinationen von Welpen zu generieren, eine für jede Kombination von jedem Hund. Wählen Sie einen Welpen aus.
Hier gilt das Konzept des kartesischen Produkts, bei dem Mengen multipliziert werden, um einzigartige Kombinationen von Elementen zu erzeugen. Während SQL-Tabellen hierfür eine einfache Lösung bieten, bietet LINQ einen eleganten Ansatz.
Betrachten Sie zunächst den Fall, in dem die Anzahl der Sätze (Hunde) zur Kompilierungszeit bekannt ist. Sie können eine einfache LINQ-Abfrage verwenden:
<code>var combinations = from p1 in dog1.Puppies from p2 in dog2.Puppies from p3 in dog3.Puppies select new {p1, p2, p3};</code>
Diese Abfrage generiert eine Reihe anonymer Typen, wobei jeder Typ eine Kombination von Welpen in jedem Hund darstellt.
Wenn jedoch die Anzahl der Sammlungen zum Zeitpunkt der Kompilierung nicht bekannt ist, ist ein dynamischerer Ansatz erforderlich. Im Artikel von Eric Lippert erfahren Sie, wie Sie mit LINQ das kartesische Produkt berechnen:
https://www.php.cn/link/f28c49d8be62973ac7716e0b87dae2f9
Nach Erhalt der CartesianProduct-Methode:
<code>var combinations = CartesianProduct(from dog in person.Dogs select dog.Puppies);</code>
Dadurch wird eine Folge von Sequenzen zurückgegeben, wobei jede innere Sequenz eine Kombination aus einem Welpen von jedem Hund enthält.
Um es zusammenzufassen: Unabhängig davon, ob die Anzahl der Hunde statisch oder dynamisch ist, können Sie LINQ verwenden, um die gewünschte Kombination von Welpen zu generieren.
Das obige ist der detaillierte Inhalt vonWie kann LINQ effizient alle möglichen Welpenkombinationen aus mehreren Hunden generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!