如何使用 SQL Server 中的“跳过”功能

use*_*640 3 sql sql-server-2012

我已经实现了无限滚动并将其与实体一起使用,但我想将其传输到 SQL Server,但不知道如何这是我在实体中的代码。

     var page = id ?? 1;
        const int recordsPerPage = 10;
        var skipRecords = page * recordsPerPage;

        var listOfProducts = _data.Products.Where(x => x.ProductLine != null); 

         return listOfProducts.
            OrderBy(x=>x.Name).
            Skip(skipRecords).
            Take(recordsPerPage).ToList();
Run Code Online (Sandbox Code Playgroud)

我还有其他东西在工作,我只是不知道如何实现跳过,就是我对 SQL Server 的操作

Select top 10  * 
from products 
where ProductLine != null 
order by name
Run Code Online (Sandbox Code Playgroud)

应该是这样的,如果were在第1页,那么它应该显示top 10 (1 x 10),如果were在第2页,那么它应该显示top 20。

jpw*_*jpw 5

在 SQL Server 2012 中,如果您愿意让客户端维护状态(关于要偏移的行数),则可以使用OFFSET FETCH 子句进行分页。请参阅使用 OFFSET 和 FETCH 限制引用链接中返回的行部分。

一个例子(取自一些 MSDN 页面):

--Skip first 10 rows from the sorted result set and return the remaining rows.     
SELECT * FROM MyTable ORDER BY col1 OFFSET 10 ROWS;

--Skip first 10 rows from the sorted resultset and return next 5 rows. 
SELECT * FROM MyTable ORDER BY col1 OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)