У меня есть следующий код:
var test = _fitDbContext.MvLatestTestResult
.Include(r => r.LastTest)
.Include(r => r.LastTest.Testrun)
.Include(r => r.LastTest.Testrunconfig)
.Where(r => r.LastTest.Testrunconfig.Started.Value.Hour >= 0 && r.LastTest.Testrunconfig.Started.Value.Hour < 6)
.Where(r => r.LastTest.Testrun.Userc == "build")
.Where(r => r.ProductId == productId)
.GroupBy(r => r.LastTest.Testrunconfig.Started.Value.Date)
.OrderByDescending(r => r.Key.Date)
.Take(3)
.ToDictionary(group => group.Key, group => group.GroupBy(r => r.Configfilename));
Переменная test выглядит так:
Вы можете видеть, что LastTest это null. Если я удалю .OrderByDescending(r => r.Key.Date), он содержит значение.
Почему По убыванию удаляет значение LastTest?
РЕДАКТИРОВАТЬ
Интересная вещь, которую я только что узнал. Если я изменю порядок GroupBy и OrderBy, все будет работать как положено. Проблема в том, что OrderBy выполняется со всеми записями и занимает много времени.
var test = _fitDbContext.MvLatestTestResult
.Include(r => r.LastTest)
.Include(r => r.LastTest.Testrun)
.Include(r => r.LastTest.Testrunconfig)
.Where(r => r.LastTest.Testrunconfig.Started.Value.Hour >= 0 && r.LastTest.Testrunconfig.Started.Value.Hour < 6)
.Where(r => r.LastTest.Testrun.Userc == "build")
.Where(r => r.ProductId == productId)
.OrderByDescending(r => r.Key.Date)
.GroupBy(r => r.LastTest.Testrunconfig.Started.Value.Date)
.Take(3)
.ToDictionary(group => group.Key, group => group.GroupBy(r => r.Configfilename));
Простым решением было бы инициировать запрос после .Where(r => r.ProductId == productId), с .ToList() или ToListAsync().
Вы оба указали мне правильное направление. Проблема в том, что вызов .ToList() извлекает более 100 000 строк, что значительно замедляет работу приложения. Любые другие варианты?
@BradleyUffner Я отредактировал свой ответ. Пожалуйста, проверьте это.
Примечание: поскольку вы GroupBy.Date, вы можете просто OrderBy.Key.
Можете ли вы снова добавить Includes после Take?





Вы Конечно это
OrderByсдираетеInclude? По моему опыту, это будетGroupBy, поскольку все, что действует как проекция, будет иметь такой эффект.