LINQ to SQL робить це за допомогою функції вікна ROW_NUMBER:
SELECT a,b,c FROM
(SELECT a,b,c, ROW_NUMBER() OVER (ORDER BY ...) as row_number
FROM Table) t0
WHERE to.row_number BETWEEN 1000 and 1100;
Це працює, але необхідність виготовити номер_ рядка з ORDER BY може призвести до того, що ваш запит буде відсортований на стороні сервера і спричинить проблеми з продуктивністю. Навіть коли індекс може задовольнити вимогу ORDER BY, запит все одно повинен нарахувати 1000 рядків перед початком повернення результатів. Занадто часто розробники забувають про це і просто кидають елемент керування пагінацією над таблицею 5 мільйонів рядків і дивуються, чому перша сторінка повертається набагато швидше, ніж остання ...
Тим не менш, використання ROW_NUMBER () - це, мабуть, найкращий баланс між простотою використання та гарною продуктивністю, за умови, що ви уникаєте сортування (умова ORDER BY може бути задоволено індексом).