J'ai besoin de traduire cette SQL
déclaration en Linq-Entity
requête ...
SELECT name, count(name) FROM people
GROUP by name
J'ai besoin de traduire cette SQL
déclaration en Linq-Entity
requête ...
SELECT name, count(name) FROM people
GROUP by name
Réponses:
Mais recherchez toujours les messages dans la console / le journal. 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 (désormais renommé Entity Framework Core 1.0 / 2.0 ) ne prend pas encore en charge la GroupBy()
traduction GROUP BY
en SQL généré (même dans la version 1.0 finale, ce n'est pas le cas). Toute logique de regroupement s'exécutera du côté client, ce qui pourrait entraîner le chargement d'un grand nombre de données.
Finalement, le code écrit comme celui-ci commencera automatiquement à utiliser GROUP BY, mais pour l'instant, vous devez être très prudent si le chargement de l'ensemble de votre ensemble de données non groupé en mémoire entraîne des problèmes de performances.
Pour les scénarios où il s'agit d'un deal-breaker, 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 est de collecter les résultats dans une Dictionary
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);
À l'origine trouvé ici: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
Voici un exemple simple de group by 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()};
Ce qui se traduit par:
SELECT [n].[AppUserId], COUNT(*) AS [Count]
FROM [Notifications] AS [n]
WHERE [n].[Sent] = 0
GROUP BY [n].[AppUserId]
avec EF 6.2 cela a fonctionné pour moi
var query = context.People
.GroupBy(p => new {p.name})
.Select(g => new { name = g.Key.name, count = g.Count() });