Мне нужно перевести это SQL
утверждение в Linq-Entity
запрос ...
SELECT name, count(name) FROM people
GROUP by name
источник
Мне нужно перевести это SQL
утверждение в Linq-Entity
запрос ...
SELECT name, count(name) FROM people
GROUP by name
Синтаксис запроса
var query = from p in context.People
group p by p.name into g
select new
{
name = g.Key,
count = g.Count()
};
Синтаксис метода
var query = context.People
.GroupBy(p => p.name)
.Select(g => new { name = g.Key, count = g.Count() });
Но всегда ищите сообщения в консоли / журнале. Если вы видите уведомление о том, что ваш запрос не может быть преобразован в 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
для быстрого поиска (например, в цикле):Первоначально найдено здесь: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
источник
Вот простой пример group by в .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 это сработало для меня
источник