LINQ to SQL thực hiện điều này bằng cách sử dụng hàm cửa sổ 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;
Điều này hoạt động, nhưng nhu cầu tạo ra row_number từ ORDER BY có thể dẫn đến việc truy vấn của bạn được sắp xếp ở phía máy chủ và gây ra sự cố về hiệu suất. Ngay cả khi một chỉ mục có thể đáp ứng yêu cầu ORDER BY, truy vấn vẫn phải đếm 1000 hàng trước khi bắt đầu trả về kết quả. Tất cả các nhà phát triển thường quên điều này và chỉ ném kiểm soát phân trang trên bảng 5 triệu hàng và tự hỏi tại sao trang đầu tiên được trả lại nhanh hơn trang cuối cùng ...
Không hơn không kém, sử dụng ROW_NUMBER () có lẽ là sự cân bằng tốt nhất giữa tính dễ sử dụng và hiệu suất tốt, miễn là bạn đảm bảo tránh sắp xếp (điều kiện ORDER BY có thể được đáp ứng bởi một chỉ mục).