2009-06-28 20 views
2

Ich habe eine Künstler-Tabelle und eine Style-Tabelle.Gruppieren und zählen mit LinqToSQL

Künstler Tabelle: id Name styleid

Arttabelle id Name

Ein Künstler einen Artidentifikation

hat Ich versuche, eine Art Zusammenfassung zurückzukehren, die Artidentifikation enthält , Stilname und Anzahl der Künstler, die zu diesem Stil gehören.

Ich habe die folgende Aussage, die mir die ID und die Anzahl der Künstler, aber ich kann nicht sehen, wie auch den Namen des Stils zu bekommen.

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

Ist dies möglich, mit einem einzigen Rundreise?

Antwort

3

Sie können einen anonymen Typ zu einer Gruppe von mehreren Werten verwenden:

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

Sie könnten eine Zählung in einer Sub-Abfrage wie folgt tun ...

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