Maison > base de données > tutoriel mysql > Comment LINQ peut-il réaliser un produit cartésien avec un nombre variable d'ensembles ?

Comment LINQ peut-il réaliser un produit cartésien avec un nombre variable d'ensembles ?

Patricia Arquette
Libérer: 2025-01-17 07:07:12
original
562 Les gens l'ont consulté

How Can LINQ Perform a Cartesian Product with a Variable Number of Sets?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal