Necesito traducir esta SQL
declaración a una Linq-Entity
consulta ...
SELECT name, count(name) FROM people
GROUP by name
fuente
Necesito traducir esta SQL
declaración a una Linq-Entity
consulta ...
SELECT name, count(name) FROM people
GROUP by name
Sintaxis de la consulta
var query = from p in context.People
group p by p.name into g
select new
{
name = g.Key,
count = g.Count()
};
Sintaxis del método
var query = context.People
.GroupBy(p => p.name)
.Select(g => new { name = g.Key, count = g.Count() });
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):Encontrado originalmente aquí: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
fuente
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]
fuente
con EF 6.2 funcionó para mí
fuente