LINQ เป็น 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;
วิธีนี้ใช้ได้ผล แต่ความจำเป็นในการสร้าง row_number จาก ORDER BY อาจส่งผลให้การสืบค้นของคุณถูกจัดเรียงบนฝั่งเซิร์ฟเวอร์และทำให้เกิดปัญหาด้านประสิทธิภาพ แม้ว่าดัชนีจะสามารถตอบสนองความต้องการ ORDER BY แต่แบบสอบถามยังคงต้องนับ 1,000 แถวก่อนที่จะเริ่มส่งคืนผลลัพธ์ บ่อยครั้งที่นักพัฒนาลืมสิ่งนี้และเพียงแค่โยนการควบคุมการแบ่งหน้าบนตาราง 5 ล้านแถวและสงสัยว่าทำไมหน้าแรกจึงกลับมาเร็วกว่าหน้าสุดท้ายมาก ...
การใช้ ROW_NUMBER () อาจเป็นความสมดุลที่ดีที่สุดระหว่างความสะดวกในการใช้งานและประสิทธิภาพที่ดีหากคุณต้องแน่ใจว่าคุณหลีกเลี่ยงการเรียงลำดับ (สามารถกำหนดเงื่อนไข ORDER BY โดยดัชนีได้)