Cela dépend.
IEnumerable<T>
minimise le couplage entre le code appelant et l'implémentation du référentiel. Mais tout autre traitement (par exemple tri) doit être effectué en cours.
IQueryable<T>
permet d'ajouter d'autres opérations, qui peuvent (en fonction de l'implémentation du référentiel) être effectuées sur le magasin de données sous-jacent.
Puisque vous pouvez convertir facilement entre l'une de ces (il y a une méthode d'extension AsQueryable
qui permet à un IEnumerable<T>
à convertir en un IQueryable<T>
pour le typage, mais le traitement est bien sûr encore fait en mémoire).
Personnellement, j'aime les avantages potentiels que donne IQueryable<T>
, même si un référentiel non basé sur LINQ ne peut pas en tirer bénéfice maintenant. D'autre part YAGTNI.