110 votes

Comment effectuer une jointure entre plusieurs tables dans une lambda LINQ ?

J'essaie d'effectuer une Jointure entre plusieurs tables dans LINQ. J'ai les classes suivantes :

Product {Id, ProdName, ProdQty}

Category {Id, CatName}

ProductCategory{ProdId, CatId} //association table

J'utilise le code suivant (où product , category y productcategory sont des instances des classes susmentionnées) :

var query = product.Join(productcategory, p => p.Id, pc => pc.ProdID, (p, pc) => new {product = p, productcategory = pc})
                   .Join(category, ppc => ppc.productcategory.CatId, c => c.Id, (ppc, c) => new { productproductcategory = ppc, category = c});

Avec ce code, j'obtiens un objet de la classe suivante :

QueryClass { productproductcategory, category}

Lorsque producproductcategory est de type :

ProductProductCategoryClass {product, productcategory}

Je ne comprends pas où se trouve la "table" jointe, je m'attendais à ce qu'il y ait une "table" jointe. classe unique qui contient toutes les propriétés des classes concernées.

Mon objectif est de remplir un autre objet avec certaines propriétés résultant de la requête :

CategorizedProducts catProducts = query.Select(m => new { m.ProdId = ???, m.CatId = ???, //other assignments });

comment puis-je atteindre cet objectif ?

0voto

tahaDev Points 546

Cela fait un certain temps, mais ma réponse peut aider quelqu'un :

si vous avez déjà défini correctement la relation, vous pouvez l'utiliser :

        var res = query.Products.Select(m => new
        {
            productID = product.Id,
            categoryID = m.ProductCategory.Select(s => s.Category.ID).ToList(),
        }).ToList();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X