Как мне раскрыть общее количество записей и IEnumable коллекцию выгружаемых записей из моего метода уровня сервиса?

Я сначала использую EF4 с кодом, и у меня есть репозиторий для сохранения и уровень сервиса, который с ним взаимодействует. У меня есть метод уровня обслуживания, который вызывает метод IQueryable в моем репозитории и возвращает IEnumerable, содержащий объекты. Мне также нужно вернуть общее количество записей, чтобы я мог вычислить ссылки на страницы.

Как мне вернуть как int, так и IEnumerable из моего метода службы?

  • Используйте параметр out в методе для общего количества строк
  • Создайте отдельный класс, который включает общее количество строк в качестве свойства
  • Переместите запрос LINQ подкачки из уровня сервиса (выставьте IQueryable из репозитория на уровне сервиса)
  • Создайте полностью отдельный метод на уровень сервиса, который выполняет новый запрос только для подсчета.

Все они должны работать, но какой из них самый чистый?

ОБНОВЛЕНИЕ: Вот некоторые пояснения к архитектуре. Если это не так, скажите, пожалуйста, лучший способ (например, выполнить разбиение по страницам на уровне представления, а не на уровне обслуживания и т. Д.)

Уровень репо:

возвращает IQueryable из DbSet, абстрагирует доступ к базе данных из уровня представления

Уровень обслуживания:

выполняет LINQ-запрос к IQueryable для фильтрации и просто получения элементов страницы по мере необходимости с помощью skip and take и возвращает IEnumerable (будет также установлено значение List при возврате, чтобы избежать проблем с жизненным циклом DbContext)

Уровень представления:

Вызов метода на уровне обслуживания (getPagedResults (filters, pageNumber, pageSize))

Судя по всему, мне также нужно будет добавить отдельный метод для получения общих результатов. Надеялся сделать все за один звонок.

Я бы предпочел не возвращать все записи в презентацию, а затем страница ... кажется неэффективной.

8
задан jpshook 21 June 2011 в 14:39
поделиться