Contagem de quadros SQL para Entidade Grupo-A

preciso traduzir esta declaração SQL para uma consulta Linq-Entity...

SELECT name, count(name) FROM people
GROUP by name
Author: Aducci, 2012-07-19

4 answers

Sintaxe da Pesquisa

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

Sintaxe do Método

var query = context.People
                   .GroupBy(p => p.name)
                   .Select(g => new { name = g.Key, count = g.Count() });
 134
Author: Aducci, 2012-07-19 15:43:31

Editar: EF Core 2.1 suporta finalmente GroupBy

Mas procure sempre na consola / Registo as mensagens. Se você ver uma notificação de que sua consulta não poderia ser convertida para SQL e será avaliada localmente, então você pode precisar reescrevê-la.


O Entity Framework 7 (agora renomeado para Entity Framework Core 1.0 / 2.0) ainda não suporta GroupBy() a tradução para GROUP BY em SQL gerado (mesmo na versão final 1.0 que não suporta). As a lógica de agrupamento será executada no lado do cliente, o que pode fazer com que muitos dados sejam carregados.

Eventualmente, um código escrito como este irá automaticamente começar a usar o grupo por, mas por agora você precisa ser muito cauteloso se carregar todo o seu conjunto de dados não agrupados na memória irá causar problemas de desempenho.

Para cenários onde isto é um quebra-negócio, terá de escrever o SQL à mão e executá-lo através da EF.

Em caso de dúvida, Acenda o perfil Sql e veja o que é gerado. - o que devias estar a fazer.

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

 19
Author: Simon_Weaver, 2018-05-18 17:49:42

Uma extensão útil é recolher os resultados num Dictionary para uma pesquisa rápida (por exemplo, num 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);

Originalmente encontrado aqui: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c

 11
Author: Christian Moser, 2014-07-15 16:06:51

Com EF 6. 2 funcionou para mim

  var query = context.People
               .GroupBy(p => new {p.name})
               .Select(g => new { name = g.Key.name, count = g.Count() });
 0
Author: Nava Bogatee, 2018-04-27 05:19:59