Maison >développement back-end >C++ >Comment joindre efficacement plusieurs tables à l'aide d'expressions LINQ Lambda ?

Comment joindre efficacement plusieurs tables à l'aide d'expressions LINQ Lambda ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-10 11:36:42217parcourir

How to Efficiently Join Multiple Tables Using LINQ Lambda Expressions?

Utilisez les expressions LINQ Lambda pour effectuer des jointures multi-tables

Présentation

Dans LINQ, plusieurs tables peuvent être jointes pour combiner des données provenant de différentes sources de données. Cet article explique comment effectuer des jointures multi-tables à l'aide d'expressions lambda dans LINQ.

Question

Vous essayez de joindre trois tables : Product, Category et ProductCategory. Après la concaténation, vous souhaitez obtenir une classe unique combinant toutes les propriétés de classe pertinentes. Cependant, le code que vous avez écrit ne semble pas produire les résultats escomptés.

Réponse

Lors du chaînage de plusieurs connexions dans une expression lambda LINQ, les résultats intermédiaires sont représentés sous forme de types anonymes. Cela signifie que le résultat de chaque jointure sera un nouveau type anonyme combinant les propriétés des tables jointes.

Pour obtenir une seule classe contenant tous les attributs de classe pertinents, vous devez spécifier les attributs que vous souhaitez inclure dans le résultat final. Cela peut être fait à l'aide de l'opérateur Select.

Voici le code corrigé :

<code>var categorizedProducts = product
    .Join(productcategory, p => p.Id, pc => pc.ProdId, (p, pc) => new { p, pc })
    .Join(category, ppc => ppc.pc.CatId, c => c.Id, (ppc, c) => new { ppc, c })
    .Select(m => new { 
        ProdId = m.ppc.p.Id, // 或 m.ppc.pc.ProdId
        CatId = m.c.CatId
        // 其他赋值
    });</code>

Dans ce code, nous effectuons d'abord une jointure entre trois tables et stockons le résultat dans un type anonyme intermédiaire. Nous utilisons ensuite l'opérateur Select pour projeter le résultat final dans un nouveau type anonyme qui inclut les propriétés requises (ProdId et CatId).

Vous pouvez simplifier davantage votre code en utilisant la syntaxe de requête au lieu des expressions lambda :

<code>var categorizedProducts =
    from p in product
    join pc in productcategory on p.Id equals pc.ProdId
    join c in category on pc.CatId equals c.Id
    select new {
        ProdId = p.Id, // 或 pc.ProdId
        CatId = c.CatId
        // 其他赋值
    };</code>

La syntaxe des requêtes est plus lisible et plus facile à comprendre, en particulier dans les requêtes complexes impliquant plusieurs jointures.

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!

Déclaration:
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