Paginé de résultats de recherche avec LINQ to SQL

Quel est le meilleur modèle pour obtenir paginé résultats avec LINQ to SQL?

J'ai le scénario suivant:

Supposons que je recherche éléments table par description. Je peux facilement le faire:

public IQueryable<Item> FindItemsByDescription(string description)
{
   return from item in _dc.Items
          where item.Description.Contains(description);
}

Maintenant, quel serait le meilleur moyen pour paginer cet ensemble de résultats?

  1. Devrais-je effectuer une compter requête avant de le faire pour trouver le résultat de la taille de l'ensemble et puis la limite de cette requête en fonction de ce que je veux? J'ai l'impression que c'est le chemin à parcourir.
  2. Dois-je effectuer la requête complète, prendre le comptage à partir de la taille de la matrice et de ne retourner qu'un paginé sous-ensemble de cet ensemble? J'ai le sentiment que ce sera une énorme perte de temps si le jeu de résultats est assez grand... Ou est LINQ to SQL faire de la magie ici?

Est-il un LINQ to SQL modèle commun pour la réalisation de cette opération?

EDIT: je doit préciser une petite chose. Je suis conscient de Prendre et de Sauter méthodes. Mais, avant d'utiliser Prendre et Sauter, comment dois-je obtenir le nombre total de résultats de la requête souhaitez récupérer?