2012-07-19 18 views

risposta

119

sintassi di query

var query = from p in context.People 
      group p by p.name into g 
      select new 
      { 
       name = g.Key, 
       count = g.Count() 
      }; 

sintassi Metodo

var query = context.People 
        .GroupBy(p => p.name) 
        .Select(g => new { name = g.Key, count = g.Count() }); 
10

Un'estensione utile consiste nel raccogliere i risultati in un Dictionary per la ricerca rapida (ad es. in un ciclo):

var resultDict = _dbContext.Projects 
    .Where(p => p.Status == ProjectStatus.Active) 
    .GroupBy(f => f.Country) 
    .Select(g => new { country = g.Key, count = g.Count() }) 
    .ToDictionary(k => k.country, i => i.count); 

Originariamente trovato qui: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c

14

IMPORTANTE: Entity Framework 7 (ora rinominato in Entity Framework Core 1.0/2.0) non supporta ancora GroupBy() per la traduzione di GROUP BY in SQL generato (anche nella versione 1.0 finale non lo farà). Qualsiasi logica di raggruppamento verrà eseguita sul lato client, il che potrebbe causare il caricamento di molti dati.

Alla fine codice scritto come questo avrà automagicamente iniziare a utilizzare GROUP BY, ma per il momento è necessario essere molto cauti se il caricamento di tutto il tuo set di dati non-raggruppati in memoria causerà problemi di prestazioni.

Per gli scenari in cui questo è un rompicapo dovrai scrivere l'SQL a mano ed eseguirlo tramite EF.

In caso di dubbi, avviare Sql Profiler e vedere cosa viene generato, cosa che probabilmente si dovrebbe fare comunque.

https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2

+5

Grazie per il testa a testa –

+4

anche senza raggruppamento in 1.1 –

+4

o 1.2 o 2.0. Mi arrendo –