使用Linq To SQL进行分组和计数

时间:2009-06-28 09:48:27

标签: linq-to-sql count grouping

我有一张艺术家表和一张样式表。

艺术家表: ID 名称 styleid

样式表 ID 名字

艺术家的样式ID

我正在尝试返回样式摘要,其中包括样式ID,样式名称和属于该样式的艺术家数量。

我有以下声明,它让我了解艺术家的身份和数量,但我不知道如何获得样式名称。

          return from s in DBContext.Styles
               join artist in DBContext.Artists on s.ID equals artist.StyleID
               group artist by artist.StyleID into a
               select new DTO.StyleSummary
               {
                   ID = a.Key,
                   NumberOfArtists = a.Count()
               };

这可以通过一次往返来实现吗?

2 个答案:

答案 0 :(得分:3)

您可以使用匿名类型按多个值进行分组:

    return from s in DBContext.Styles
           join artist in DBContext.Artists on s.ID equals artist.StyleID
           group artist by new {s.ID, s.Name } into a
           select new DTO.StyleSummary {
               ID = a.Key.ID,
               Name = a.Key.Name,
               NumberOfArtists = a.Count()
           };

答案 1 :(得分:1)

您可以在像这样的子查询中进行计数......

var results =
    from s in DBContext.Styles
    select new
    {
        Id = s.Key,
        NumberOfArtists = 
        (
            from a in DBContext.Artists
            where a.StyleId = s.StyleId
            select a
        ).Count()
    }