У меня есть запрос:
topics.OrderBy(x => x.Replies.Any() ? x.Replies.OrderBy(y => y.PostedDate).Last().PostedDate : x.PostedDate);
Он сортирует коллекцию тем по последнему ответу или, если он не имеет ответа, то по своей дате публикации.Он отлично работает и хорошо выполняет свою работу.Тем не менее, это работает только если темы имеют тип IEnumerable<Topic>
.Если я пытаюсь сделать его `IQueryable ', я получаю сообщение о том, что метод расширения Last () неизвестен или что-то в этом роде.
Кто-нибудь знает почему?По какой-то причине получение x.Replies.Last()
в этом запросе, когда темы IQueryable, выдает это исключение.
Я бы хотел, чтобы темы были IQueryable, поскольку я сначала загружаю темы со всеми темами из базы данных, отсортированными по последнему ответу.Затем я делаю .Skip () и .Take () по темам для подкачки страниц.Однако в настоящее время он вытягивает ВСЕ темы в память, а затем выполняет .Skip () и .Take () для коллекции в памяти.Это неприемлемо, потому что чем больше тем добавлено на форум, тем больше времени требуется для загрузки сайта, особенно когда база данных не работает на том же компьютере, что и сайт.Мне нужна база данных, чтобы вернуть только постраничные строки, а не все строки.Я хочу, чтобы подкачка происходила на уровне базы данных.
Есть идеи?
PS - я использую LINQ для сущностей с Entity Framework 4.0