Мені потрібно перекласти це SQL
твердження на Linq-Entity
запит ...
SELECT name, count(name) FROM people
GROUP by name
Мені потрібно перекласти це SQL
твердження на Linq-Entity
запит ...
SELECT name, count(name) FROM people
GROUP by name
Відповіді:
Але завжди слідкуйте за повідомленнями в консолі / журналі. Якщо ви бачите сповіщення про те, що ваш запит не вдалося перетворити на SQL і буде оцінений локально, можливо, вам доведеться його переписати.
Entity Framework 7 (тепер перейменований на Entity Framework Core 1.0 / 2.0 ) ще не підтримує GroupBy()
переклад GROUP BY
у згенерований SQL (навіть у остаточному випуску 1.0 це не буде). Будь-яка логіка групування працюватиме на стороні клієнта, що може спричинити завантаження великої кількості даних.
Згодом написаний таким чином код автоматично почне використовувати GROUP BY, але наразі потрібно бути дуже обережним, якщо завантаження у пам’ять всього негрупованого набору даних спричинить проблеми з продуктивністю.
У сценаріях, коли це вимикач угод, вам доведеться написати SQL вручну і виконати його за допомогою EF.
Якщо ви сумніваєтеся, запустіть Sql Profiler і подивіться, що згенеровано - що ви, мабуть, все одно повинні робити.
https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2
Корисним розширенням є збір результатів Dictionary
для швидкого пошуку (наприклад, у циклі):
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);
Спочатку знайдено тут: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
Ось простий приклад групування в .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()};
Що означає:
SELECT [n].[AppUserId], COUNT(*) AS [Count]
FROM [Notifications] AS [n]
WHERE [n].[Sent] = 0
GROUP BY [n].[AppUserId]
з EF 6.2 це спрацювало у мене
var query = context.People
.GroupBy(p => new {p.name})
.Select(g => new { name = g.Key.name, count = g.Count() });