2009-06-28 10 views
2

J'ai une table d'artiste et une table de style.Regroupement et compte avec LinqToSQL

Table artiste: id Nom styleid

table de style id Nom

Un artiste dispose d'un identifiant de style

Je suis en train de retourner un résumé de style qui comprend id style , le nom du style et le nombre d'artistes appartenant à ce style.

J'ai la déclaration suivante qui me donne l'identifiant et le nombre d'artistes mais je ne vois pas comment obtenir aussi le nom du style.

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

Est-ce possible avec un aller-retour unique?

Répondre

3

Vous pouvez utiliser un type anonyme groupe par plusieurs valeurs:

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

Vous pouvez faire un compte dans une sous requête comme ça ...

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