2012-07-19 11 views

Respuesta

119

sintaxis de consulta

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

sintaxis Método

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

Una extensión útil es recopilar los resultados en un Dictionary para una búsqueda rápida (p. en un bucle):

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

Originalmente se encuentra aquí: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c

14

IMPORTANTE: Entity Framework 7 (ahora renombrado a Entity Framework Core 1.0/2.0) aun no soporta GroupBy() para la traducción a GROUP BY en SQL generado (incluso en la versión final 1.0 no lo hará). Cualquier lógica de agrupación se ejecutará en el lado del cliente, lo que podría provocar que se carguen muchos datos.

Eventualmente, un código escrito de esta manera automáticamente iniciará el uso de GROUP BY, pero por ahora debe tener mucho cuidado si cargar todo su conjunto de datos sin agrupar en la memoria causará problemas de rendimiento.

Para escenarios en los que esto es un factor decisivo, deberá escribir el SQL manualmente y ejecutarlo a través de EF.

En caso de duda, inicie Sql Profiler y vea qué se genera, lo que probablemente debería hacer de todos modos.

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

+5

Gracias por las cabezas hasta –

+4

También ninguna agrupación en 1,1 –

+4

o 1,2 o 2,0. Renuncio a –