Reputation: 196499
i have a linq query to get data from a database. something like:
Repository.Query<Project>.Where(r=>r.IsActive).OrderBy(r=>r.Date);
i then return this to a viewmodel. i now want to add paging so i get an additional parameter in my controller action which is the page so i want something to add to my query to return lets say 10 results * the page number:
So if its page 1, i want to get the first 10 results. I know i can use the
.Take(10)
to do this but i am unsure how to do this when the page passed in is 2 or 3 or anything but 1.
what is the best way (and most efficient) to do this ??
Upvotes: 3
Views: 536
Reputation: 40182
Make an extension method. Chances are, you'll need this all over your web application.
public static IEnumerable<T> TakePage<T>(this IEnumerable<T> items, int page, int pageSize = 10) where T : class
{
return items.Skip(pageSize * (page - 1)).Take(pageSize);
}
Usage:
int page = 2;
int pageSize = 25;
Repository.Query<Project>.Where(r=>r.IsActive).TakePage(page, pageSize);
Upvotes: 0