Linq to sql 使用LinqToSQL进行分组和计数

Linq to sql 使用LinqToSQL进行分组和计数,linq-to-sql,count,grouping,Linq To Sql,Count,Grouping,我有一张艺术家桌和一张风格桌 艺术家表: 身份证件 名称 styleid 样式表 身份证件 名字 艺术家有一个风格id 我试图返回一个样式摘要,其中包括样式id、样式名称和属于该样式的艺术家数量 我得到了下面的声明,它让我的id和艺术家的数量,但我不知道如何也得到样式名称 return from s in DBContext.Styles join artist in DBContext.Artists on s.ID equals artist

我有一张艺术家桌和一张风格桌

艺术家表: 身份证件 名称 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()
               };

单次往返是否可行?

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

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

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

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