Фон
Я работаю над веб-приложением с использованием шаблона единицы работы / хранилища. Я выбрал сервисный уровень, который взаимодействует с репозиториями. Репозитории возвращают IQueryable на сервисный уровень, а сервисный уровень возвращает List на контроллеры.
Я решил не возвращать IQueryable в контроллер, чтобы убедиться, что запросы будут повторно использованы и помещены на соответствующий уровень - уровень обслуживания. Кроме того, потому что веб-службы могут потребоваться позже.
Вопрос
Как лучше всего разрешить разбиение на страницы и сортировку на уровне контроллера, не выставляя IQueryable на уровне контроллера?
Один из вариантов - добавить параметры ко всем сервисным функциям, которые могут возвращать несколько объектов, но это не кажется идеальным. В качестве альтернативы я мог бы по-прежнему просматривать страницы в возвращенных списках, но это может привести к большому количеству ненужного доступа к данным.
Изменить для уточнения
Мой репозиторий имеет такую функцию:
public IQueryable<T> GetAll()
{
return objectSet;
}
Мой сервис имеет такую функцию:
public List<Person> GetAllPeople()
{
return repository.GetAll().ToList()
}
Я счастлив, что хранилище возвращает IQueryable службе, поскольку это позволяет службе иметь такие функции, как: GetPersonByName, GetPersonByEmail и т. Д.
Но я ищу альтернативу простому назначению функции GetAllPeople над параметрами «PageNumber» и «PageSize».