Maison >base de données >tutoriel mysql >Comment LINQ peut-il réaliser un produit cartésien avec un nombre variable d'ensembles ?
Implémentation d'un produit cartésien avec un nombre variable d'ensembles à l'aide de LINQ
Supposons qu'une structure de classe contienne une personne, plusieurs chiens et plusieurs chiots pour chaque chien. L'objectif est de générer une liste de toutes les combinaisons possibles de chiots, en sélectionnant un chiot pour chaque chien.
En SQL, cela peut être réalisé en utilisant l'opération produit cartésien, par exemple :
<code class="language-sql">select * from puppies a, puppies b where a.parent='dog1' and b.parent='dog2'</code>
Est-il possible d'effectuer des opérations similaires avec LINQ ?
Si la taille définie des chiens (c'est-à-dire le nombre de chiens) est connue au moment de la compilation, une approche simple peut être utilisée :
<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>
Toutefois, si le nombre de chiens collectés est inconnu, une approche plus générale est nécessaire. Eric Lippert détaille une solution dans son article et sur StackOverflow qui consiste à créer une méthode personnalisée pour calculer le produit cartésien :
<code class="language-csharp">public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(IEnumerable<IEnumerable<T>> sets) { // ... implementation omitted for brevity }</code>
Grâce à cette méthode, la requête souhaitée peut être exprimée comme suit :
<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies)</code>
Cela renverra une séquence de séquences de chiots, où chaque séquence représente une combinaison d'un chiot de chaque chien. Par exemple, si les chiens « chien1 » et « chien2 » ont respectivement des chiots « p11 », « p12 » et « p21 », le résultat sera :
<code>{p11, p21} {p11, p22} {p12, p21} {p12, p22}</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!