Heim >Datenbank >MySQL-Tutorial >Wie kann LINQ ein kartesisches Produkt mit einer variablen Anzahl von Sätzen ausführen?
Implementierung eines kartesischen Produkts mit variabler Anzahl von Sätzen mithilfe von LINQ
Angenommen, eine Klassenstruktur enthält eine Person, mehrere Hunde und mehrere Welpen für jeden Hund. Ziel ist es, eine Liste aller möglichen Welpenkombinationen zu erstellen und aus jedem Hund einen Welpen auszuwählen.
In SQL kann dies mithilfe der kartesischen Produktoperation erreicht werden, zum Beispiel:
<code class="language-sql">select * from puppies a, puppies b where a.parent='dog1' and b.parent='dog2'</code>
Ist es möglich, ähnliche Vorgänge mit LINQ durchzuführen?
Wenn die festgelegte Größe der Hunde (d. h. die Anzahl der Hunde) zum Zeitpunkt der Kompilierung bekannt ist, kann ein einfacher Ansatz verwendet werden:
<code class="language-csharp">from p1 in dog1.Puppies from p2 in dog2.Puppies from p3 in dog3.Puppies select new {p1, p2, p3};</code>
Wenn jedoch die Anzahl der gesammelten Hunde unbekannt ist, ist ein allgemeinerer Ansatz erforderlich. Eric Lippert beschreibt in seinem Artikel und auf StackOverflow eine Lösung, die die Erstellung einer benutzerdefinierten Methode zur Berechnung des kartesischen Produkts umfasst:
<code class="language-csharp">public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(IEnumerable<IEnumerable<T>> sets) { // ... implementation omitted for brevity }</code>
Mit dieser Methode kann die gewünschte Abfrage wie folgt ausgedrückt werden:
<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies)</code>
Dadurch wird eine Folge von Welpensequenzen zurückgegeben, wobei jede Sequenz eine Kombination aus einem Welpen jedes Hundes darstellt. Wenn beispielsweise die Hunde „Hund1“ und „Hund2“ die Welpen „p11“, „p12“ und „p21“ haben, lautet die Ausgabe:
<code>{p11, p21} {p11, p22} {p12, p21} {p12, p22}</code>
Das obige ist der detaillierte Inhalt vonWie kann LINQ ein kartesisches Produkt mit einer variablen Anzahl von Sätzen ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!