Я бы добавил запрос к бизнес-объекту (я думаю, что у вас его нет, не так ли), там у вас может быть его базовая версия и еще одна для выгружаемых данных. И я ожидаю, что служба выполнит этот запрос, вызвав ToList, я считаю опасным возвращать объект запроса в контроллер.
В вашем хранилище может быть метод GetPartial с параметрами sort, from, to и filter. Если у вас есть универсальный сервис, вы также можете реализовать его в этом универсальном сервисе.
public List<Contributor> GetPartial<TSortBy>(Expression<Func<Contributor, TSortBy>> sortByExpr, Expression<Func<Contributor, bool>> filterExpr, int pageNo, int pageSize)
{
var query = db.Contributors;
if (filterExpr != null)
query.Where(filterExpr);
query.orderBy(sortByExpr).Skip (...).Take(...).ToList();
}
если у вас есть класс репозитория, вы можете добавить этот метод.
Кстати, я использую Dynamic LINQ, что упрощает передачу порядка по выражению в виде простого текста (как sql)