2009-02-16 8 views
1

J'ai deux tables, produits et catégories. comment puis-je convertir la requête SQL suivante en format linq?convertir MS sql "groupe par" requête à linq à sql

select c.Name, c.DisplayName, count(p.id) from categories as c 
LEFT join products as p on p.categoryId = c.id 
group by c.Name, c.DisplayName 

certaines catégories auront 0 produits en eux de sorte que le LEFT JOIN est important

Répondre

2

si vous définissez correctement les relations dans votre modèle, la table des clients devrait avoir une association avec tous les produits, de sorte que vous » Vous pourrez accéder aux produits associés au client en utilisant simplement "c.Produits". Ensuite, devrait être en mesure d'écrire simplement quelque chose comme ceci:

var q = 
    from c in categories 
    select new { c.Name, c.DisplayName, Count = c.Products.Count() } 

T.

+0

wow linq m'impressionne de plus en plus tous les jours. Merci pour la réponse! – jorsh1

0
dc.categories 
.Select(c => new 
{ 
    Name = c.Name, 
    DisplayName = c.DisplayName, 
    TheCount = c.Products.Count() 
} 

Si vous voulez faire une jointure gauche dans d'autres cas, consultez « groupe Rejoindre ».

dc.categories 
.GroupJoin(dc.products, 
    c => c.id, 
    p => p.categoryid, 
    (c, g) => new { Name = c.Name, TheCount = g.Count() } 
); 
0

pour montrer le regroupement sur la base.

var q = from c in db.categories 
    group c by new {c.Name , c.DisplayName} into alias 
    select new { alias.Name, 
       alias.DisplayName, 
       Count = alias.Count(p => p.id) 
       }