J'ai besoin de traduire ceci SQL
à un Linq-Entity
une requête...
SELECT name, count(name) FROM people
GROUP by name
J'ai besoin de traduire ceci SQL
à un Linq-Entity
une requête...
SELECT name, count(name) FROM people
GROUP by name
Mais regardez toujours dans la console / le journal pour les messages. Si vous voyez une notification indiquant que votre requête n'a pas pu être convertie en SQL et qu'elle sera évaluée localement, vous devrez peut-être la réécrire.
Entity Framework 7 (maintenant renommé en Entity Framework Core 1.0 / 2.0 ) ne prend pas encore en charge GroupBy()
pour la traduction en GROUP BY
dans le SQL généré (même dans la version finale 1.0, ce ne sera pas le cas). Toute logique de regroupement sera exécutée du côté client, ce qui pourrait entraîner le chargement d'un grand nombre de données.
Un jour, le code écrit de cette façon commencera automatiquement à utiliser GROUP BY, mais pour l'instant, vous devez être très prudent si le chargement en mémoire de l'ensemble de vos données non groupées entraîne des problèmes de performance.
Pour les scénarios où cela constitue un obstacle, vous devrez écrire le SQL à la main et l'exécuter via EF.
En cas de doute, lancez Sql Profiler et voyez ce qui est généré - ce que vous devriez probablement faire de toute façon.
https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2
Une extension utile consiste à rassembler les résultats dans un fichier Dictionary
pour une recherche rapide (par exemple, dans une boucle) :
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);
Trouvé à l'origine ici : http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
Voici des exemples simples de regroupement dans .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()};
Les deux se traduisent par :
SELECT [n].[AppUserId], COUNT(*) AS [Count]
FROM [Notifications] AS [n]
WHERE [n].[Sent] = 0
GROUP BY [n].[AppUserId]
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.