2009-02-16 95 views
1

我有两个表,产品和类别。我如何将以下sql查询转换为linq格式?将ms sql“group by”查询转换为linq to 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 

一些类别将有0的产品里面,这样LEFT JOIN,如果你正确地定义模型中的关系,则客户表应与所有产品关联,所以你很重要

回答

2

”只需使用'c.Products'即可访问与客户相关的产品。那么应该能够简单地写是这样的:

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

T.

+0

wow linq给我留下了深刻的印象,每天都有更多。谢谢你的答案! – jorsh1 2009-02-16 20:51:07

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

如果你想要做一个左在其他情况下加入,检查出“集团加入”。

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

在基础上显示分组。

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) 
       }