Necesito traducir esta SQL
declaración a una Linq-Entity
consulta ...
SELECT name, count(name) FROM people
GROUP by name
Necesito traducir esta SQL
declaración a una Linq-Entity
consulta ...
SELECT name, count(name) FROM people
GROUP by name
Respuestas:
Pero siempre busque mensajes en la consola / registro. Si ve una notificación de que su consulta no se pudo convertir a SQL y se evaluará localmente, es posible que deba volver a escribirla.
Entity Framework 7 (ahora renombrado a Entity Framework Core 1.0 / 2.0 ) aún no admite la GroupBy()
traducción a GROUP BY
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.
Con el tiempo, el código escrito como este comenzará a usar automáticamente GROUP BY, pero por ahora debe tener mucho cuidado si cargar todo su conjunto de datos no agrupado en la memoria causará problemas de rendimiento.
Para escenarios en los que esto es un factor decisivo, tendrá que escribir el SQL a mano y ejecutarlo a través de EF.
En caso de duda, inicie Sql Profiler y vea qué se genera, lo que probablemente debería estar haciendo de todos modos.
https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2
Una extensión útil es recopilar los resultados en una Dictionary
búsqueda rápida (por ejemplo, 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);
Encontrado originalmente aquí: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
Aquí hay un ejemplo simple de agrupar en .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()};
Lo que se traduce en:
SELECT [n].[AppUserId], COUNT(*) AS [Count]
FROM [Notifications] AS [n]
WHERE [n].[Sent] = 0
GROUP BY [n].[AppUserId]
con EF 6.2 funcionó para mí
var query = context.People
.GroupBy(p => new {p.name})
.Select(g => new { name = g.Key.name, count = g.Count() });