LINQ ke SQL melakukan ini dengan menggunakan fungsi jendela 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;
Ini berfungsi, tetapi kebutuhan untuk membuat row_number dari ORDER BY dapat mengakibatkan kueri Anda diurutkan di sisi server dan menyebabkan masalah kinerja. Meskipun indeks dapat memenuhi persyaratan ORDER BY, kueri masih harus menghitung 1000 baris sebelum mulai mengembalikan hasil. Terlalu sering pengembang melupakan ini dan hanya melempar kontrol pagination ke tabel baris 5 juta dan bertanya-tanya mengapa halaman pertama dikembalikan jauh lebih cepat daripada yang terakhir ...
Meskipun demikian, menggunakan ROW_NUMBER () mungkin merupakan keseimbangan terbaik antara kemudahan penggunaan dan kinerja yang baik, asalkan Anda memastikan Anda menghindari pengurutan (kondisi ORDER BY dapat dipenuhi oleh indeks).