Пейджинг с помощью поиска с использованием Active Record

Кажется, я не могу найти ответа на этот вопрос или хорошего примера того, как достичь того, что я пытаюсь сделать. Я уверен, что это было где-то опубликовано или объяснено, но мне не удается найти точное решение, которое мне нужно.

Я использую ActiveRecord в Subsonic 3.0.0.4. Когда я делаю что-то вроде

recordset = VehicleModel.Find(x => x.Model.StartsWith(SearchText));

Я возвращаю список объектов VehicleModel (или, проще говоря, набор записей), это нормально, пока я не верну слишком много записей. Я также не могу заказать возвращенный набор записей (моя сетка справится с этим нормально, но я уверен, что она будет слишком медленной, если у меня будет слишком много записей). Поскольку Find возвращает IList, я не так уж много могу работать напрямую с этим (опять же, я могу упустить из виду что-то простое, поэтому, пожалуйста, не убивайте меня).

Мой вопрос: может ли кто-нибудь объяснить, как найти данные, такие как я выше, отсортировать их и получить страницу данных, где страница имеет размер n?

Я ошибаюсь? Я даже близок к тому, чтобы на правильном пути?


person Brian Rizzo    schedule 10.05.2010    source источник


Ответы (1)


int currentPage = x
int pageSize = n
recordset = VehicleModel.Find(x => x.Model.StartsWith(SearchText)).Skip(currentPage x PageSize).Take(PageSize);

предполагается, что currentPage начинается с 0.
если ваша currentPage начинается с 1, то его Skip((currentPage - 1) x PageSize)

person spaceman    schedule 11.05.2010
comment
Когда я набираю. после SearchText)) Я не использую параметр «Пропустить», и при компиляции я получаю сообщение об ошибке (Ошибка 1 «System.Collections.Generic.IList‹ DB.VehicleModel ›» не содержит определения для «Пропустить» и расширения Метод 'Skip', принимающий первый аргумент типа 'System.Collections.Generic.IList ‹DB.VehicleModel›', может быть найден (вам не хватает директивы using или ссылки на сборку?). Как я уже упоминал в начальном вопросе, Find - это возвращая IList, возможно, файл ActiveRecord.tt, который я использую, старше или мне не хватает чего-то еще? - person Brian Rizzo; 11.05.2010
comment
Я идиот. Мне не хватало моего использования System.Linq; Спасибо, что помогли мне понять, что мне нужно больше спать и меньше кофе. - person Brian Rizzo; 11.05.2010
comment
Посмотрев снова на код, я почти уверен, что вместо этого вы можете использовать дозвуковой метод GetPaged. - person spaceman; 11.05.2010