Preciso traduzir esta SQL
declaração em uma Linq-Entity
consulta ...
SELECT name, count(name) FROM people
GROUP by name
fonte
Preciso traduzir esta SQL
declaração em uma Linq-Entity
consulta ...
SELECT name, count(name) FROM people
GROUP by name
Sintaxe de consulta
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() });
Mas sempre procure no console / log por mensagens. Se você vir uma notificação de que sua consulta não pôde ser convertida para SQL e será avaliada localmente, talvez seja necessário reescrevê-la.
O Entity Framework 7 (agora renomeado para Entity Framework Core 1.0 / 2.0 ) ainda não oferece suporte GroupBy()
para conversão GROUP BY
em SQL gerado (mesmo na versão 1.0 final isso não acontecerá). Qualquer lógica de agrupamento será executada no lado do cliente, o que pode fazer com que muitos dados sejam carregados.
Eventualmente, o código escrito como este começará a usar o GROUP BY automaticamente, mas por enquanto você precisa ser muito cauteloso se o carregamento de todo o conjunto de dados não agrupado na memória causar problemas de desempenho.
Para cenários em que isso é um problema, você terá que escrever o SQL manualmente e executá-lo por meio do EF.
Em caso de dúvida, inicie o Sql Profiler e veja o que é gerado - o que você provavelmente deveria estar fazendo de qualquer maneira.
https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2
Uma extensão útil é coletar os resultados em uma
Dictionary
pesquisa rápida (por exemplo, em um loop):Originalmente encontrado aqui: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
fonte
Aqui está um exemplo simples de grupo em .net core 2.1
var query = this.DbContext.Notifications. Where(n=> n.Sent == false). GroupBy(n => new { n.AppUserId }) .Select(g => new { AppUserId = g.Key, Count = g.Count() }); var query2 = from n in this.DbContext.Notifications where n.Sent == false group n by n.AppUserId into g select new { id = g.Key, Count = g.Count()};
O que se traduz em:
SELECT [n].[AppUserId], COUNT(*) AS [Count] FROM [Notifications] AS [n] WHERE [n].[Sent] = 0 GROUP BY [n].[AppUserId]
fonte
com EF 6.2 funcionou para mim
fonte