using System; using System.Linq; namespace WebHelpers.Extensions { public static class Helpers { public static IQueryable<T> LimitAndOffset<T>(this IQueryable<T> q, int pageSize, int pageOffset) { return q.Skip((pageOffset - 1) * pageSize).Take(pageSize); } } }
Usage, so instead of...
return View(_productsRepository.Products.OrderBy(x => x.Description) .Skip((page - 1) * PageSize).Take(PageSize) .ToList());
...which is very brittle, use this instead:
return View(_productsRepository.Products.OrderBy(x => x.Description) .LimitAndOffset(pageSize: PageSize, pageOffset: page) .ToList());
NUnit Testing:
[Test] public void Is_paging_logic_correct() { var p = new int[] { 1, 2, 3, 4, 5}; var e = p.AsQueryable().LimitAndOffset(3, 2).ToArray(); Assert.AreEqual(2, e.Count()); Assert.AreEqual(4, e[0]); Assert.AreEqual(5, e[1]); }
No comments:
Post a Comment