Я использую платформу сущностей на веб-сайте форума и у меня есть два примера запросов с вопросами.
Запрос # 1) Этот запрос должен получить количество всех тем на форуме.Это выполнение счетчика в SQL, чтобы я получил только номер обратно?Или он вытягивает все темы в память, а затем подсчитывает их в коллекции?
return DBContext.Topics
.Where(x => !x.ModsOnly)
.Where(x => !x.Board.ModsOnly)
.Where(x => !x.Board.Hidden)
.Count();
Запрос № 2) В этом запросе предполагается получить все темы, упорядочить их по дате последнего ответа (или дате темы).если нет ответов).Затем он считает результаты и разбивает их на страницы.Сколько из этого запроса выполняется в базе данных?Этот запрос выполняется НАВСЕГДА, поэтому я думаю, что он в какой-то момент вытягивает все темы в память, вероятно, до того, как подкачка вступит в силу.
var query = DBContext.Topics
.Where(x => !x.ModsOnly)
.Where(x => !x.Board.ModsOnly)
.Where(x => !x.Board.Hidden)
.OrderByDescending(x => x.GlobalSticky)
.ThenByDescending(x => x.Replies
.Where(r => !r.ModsOnly)
.Any() ? x.Replies
.Where(r => !r.ModsOnly)
.Max(r => r.PostedDate) : x.PostedDate);
int totalTopics = query.Count();
if (totalTopics > itemsPerPage)
return query.Skip((page - 1) * itemsPerPage).Take(itemsPerPage);
else
return query;
Я не гуру LINQ, поэтому любая помощь приветствуется.Это сложный запрос, я знаю, но если кто-то может занять секунду, чтобы проанализировать его и выяснить, где / если я где-то ошибся, это было бы очень полезно.
Примечание: я пытаюсь избежать создания столбцав темах под названием «LastReplyDate» и упорядочение тем по этому.Для моих целей мне бы очень хотелось, чтобы порядок выполнялся по последнему ответу, а не по произвольной колонке по теме, которую я мог бы обновлять при каждом добавлении / удалении ответа.Однако, если вы, ребята, думаете, что нет другого способа достичь моей цели, я рассмотрю этот путь.