Время от времени я слышу, что EF Core 3.1 теперь может оптимизировать группировку и несколько агрегатных функций, таких как сумма для выполнения в базе данных. Почему мой код C # отправляет этот сильно неоптимизированный код SQL на сервер базы данных?
using var dbContext = new DatabaseContext();
var someTableData = await dbContext.SomeTable
.GroupBy(x => x.Foobar)
.Select(x => new { Foobar = x.Key, Quantity = x.Sum(y => y.Quantity) })
.OrderByDescending(x => x.Quantity)
.Take(10)
.ToListAsync();
SQL (скопировано из журнала Entity Framework):
SELECT [...] FROM public."SomeTable"
Как видите: запрос не содержит упорядочивания, группировки, суммирования, ...
Я решил свою проблему, создав представление, поскольку исходный запрос ядра ef увеличил использование ОЗУ приложением на 2 ГБ (за 2 секунды), поскольку в таблице было много записей. Но мой вопрос остается: что я сделал не так? Это потому, что я использую PostgreSQL (Npgsql.EntityFrameworkCore.PostgreSQL v3.1.0)?
GroupBy
запрос или его часть. Какой типx.Foobar
кстати? - person Ivan Stoev   schedule 03.02.2020x.Foobar
- 32-битное целое число - person WΩLLE - ˈvɔlə   schedule 03.02.2020