What's the best pattern to get paginated results with LINQ to SQL?
I have the following scenario:
Suppose I want to search items table by description. I can easily do:
public IQueryable<Item> FindItemsByDescription(string description)
{
return from item in _dc.Items
where item.Description.Contains(description);
}
Now, what would be the best way to paginate this result set?
- Should I perform a count query before doing this to find out the result set size and then limit this query according to what I want? I feel like this is the way to go.
- Should I perform the full query, take the count from the array size and return only a paginated subset from this array? I feel like this will be a huge waste of time if the resultset is big enough... Or is LINQ to SQL doing some magic here?
Is there a LINQ to SQL common pattern for performing this operation?
EDIT: I must clarify a one little thing. I am aware of Take and Skip methods. But, before using Take and Skip, how should I get the total count of results that query would retrieve?
You can use the Take extension method:
You can take this one step further and use Skip for subsequent "pages":
The pattern for paging is very simple. It involves the use of the Skip() and Take() extension methods as follows:
UPDATE: To get the total count simply use the Count() method:
Depending on how you are going to the display the records, you can use the numberOfPages to display a navigation bar with "Page X of Y" ... Page 1 of 10, etc..