2010-09-08 3 views
3

Nous avons une requête pour environ 40 champs de données liés aux clients. La requête renvoie souvent une grande quantité d'enregistrements, disons jusqu'à 20 000. Nous voulons seulement utiliser dis autour des 500 premiers résultats. Ensuite, nous voulons juste pouvoir les parcourir 10 à la fois.Est-ce que LINQ skip & take a des performances décentes?

Est-ce que LINQ saute et prend une approche raisonnable pour cela? Y a-t-il des problèmes de performance potentielle avec l'utilisation de cette approche par rapport à une autre méthode manuelle?

+0

pas si vous le faites correctement. Le meilleur moyen est de le coder, puis de voir réellement quelle requête est en cours d'exécution, et de la comparer à ce que vous écririez si vous deviez écrire le sql brut. – RPM1984

Répondre

6

Take() sans Skip() génère le code SQL à l'aide de la clause TOP.

Take() avec Skip génère du code SQL en utilisant ROW_NUMBER() comme indiqué here.

Je recommande également d'utiliser l'excellent outil LINQPad ou la journalisation LINQ to SQL pour vérifier les requêtes générées.

2

Oui, si vous utilisez SQL Server 2005+, il génèrera du code SQL qui utilise la fonction ROW_NUMBER() pour rendre la pagination efficace (similaire au code SQL Scott uses in this blog post).

Questions connexes