Quel est l'équivalent SQL de la .Skip()
méthode dans LINQ?
Par exemple: je voudrais sélectionner les lignes 1000-1100 à partir d'une table de base de données spécifique.
Est-ce possible avec juste SQL? Ou dois-je sélectionner la table entière, puis trouver les lignes en mémoire? Dans l'idéal, j'aimerais éviter cela, si possible, car la table peut être assez grande.
.net
sql
sql-server
Rayon
la source
la source
SQL Server 2012 et supérieur ont ajouté cette syntaxe:
la source
LINQ to SQL le fait en utilisant une fonction de fenêtrage ROW_NUMBER:
Cela fonctionne, mais la nécessité de fabriquer le row_number à partir de ORDER BY peut entraîner le tri de votre requête côté serveur et entraîner des problèmes de performances. Même lorsqu'un index peut satisfaire l'exigence ORDER BY, la requête doit toujours compter 1 000 lignes avant de commencer à renvoyer des résultats. Trop souvent, les développeurs oublient cela et lancent simplement un contrôle de pagination sur une table de 5 millions de lignes et se demandent pourquoi la première page est renvoyée beaucoup plus rapidement que la dernière ...
Néanmoins, l'utilisation de ROW_NUMBER () est probablement le meilleur équilibre entre facilité d'utilisation et bonnes performances, à condition d'éviter le tri (la condition ORDER BY peut être satisfaite par un index).
la source
Essaye celui-là:
Exemple:
la source
Faites ceci:
Exécutez .Skip (1000) .Take (100) sur un datacontext LINQ to SQL et regardez la sortie SQL. Il générera pour vous une instruction SQL qui fera ce que vous décrivez.
Ce ne sera pas aussi élégant, mais il fait le travail.
la source
Non, mais vous pouvez émuler la clause LIMIT de MySQL (lien Stack Overflow) pour obtenir le même résultat.
la source