Чтобы ответить на ваш второй вопрос:
Определенно предпочтительнее использовать IQueryable вместо IEnumerable.Делая это, вы можете сделать что-то вроде этого:
Controller:
public ActionResult Index(int page = 1, int pageSize = 10)
{
IQueryable<Entity> items = repository.GetEntities();
items = items.ApplyPaging(page, pageSize);
return View(items);
}
Вы можете создать из IQueryable метод расширения, называемый ApplyPaging, который выглядит следующим образом:
public static class QueryableExtensions
{
public static IQueryable<T> ApplyPaging<T>(this IQueryable<T> source, int page = 1, int pageSize = 10)
{
return source.Skip((page - 1) * pageSize).Take(pageSize);
}
}
Если это был IEnumerable, тогда подкачка можетвыполняется клиентом, а не базой данных, которая правильно строит запрос.