Как вернуть страницу результатов из SQL?

Я рекомендую либо использовать language-integrated-query LINQ, либо попытаться скопировать paginate то, что он делает. У меня language-integrated-query есть приложение, в котором linq я использую методы LINQ Take sql и Skip для извлечения выгружаемых dot-net данных. Код выглядит примерно linq-query-syntax так:

MyDataContext db = new MyDataContext();
var results = db.Products
    .Skip((pageNumber - 1) * pageSize)
    .Take(pageSize);

Запуск SQL Server Profiler paginate показывает, что LINQ преобразует paginate этот запрос в SQL аналогично:

SELECT [ProductId], [Name], [Cost], and so on...
FROM (
    SELECT [ProductId], [Name], [Cost], [ROW_NUMBER]
    FROM (
       SELECT ROW_NUMBER() OVER (ORDER BY [Name]) AS [ROW_NUMBER], 
           [ProductId], [Name], [Cost]
       FROM [Products]
    )
    WHERE [ROW_NUMBER] BETWEEN 10 AND 20
)
ORDER BY [ROW_NUMBER]

На paginate простом английском языке:
1. Отфильтруйте .net строки и используйте функцию sql-syntax ROW_NUMBER, чтобы добавить sql-select номера строк в нужном вам dot-net порядке.
2. Отфильтруйте linq-query-syntax (1), чтобы вернуть только linq-query-syntax нужные номера строк на вашей sql-query странице.
3. Отсортируйте .net (2) по номеру строки, который linq совпадает с желаемым порядком .net-framework (в данном случае по имени).

.net

sql

linq

pagination

2022-09-30T12:41:31+00:00