Sql server 用于SQL Server 2008的EntityFramework(使用LINQ)中基于偏移量/获取的分页(实现)

Sql server 用于SQL Server 2008的EntityFramework(使用LINQ)中基于偏移量/获取的分页(实现),sql-server,entity-framework,sql-server-2008,pagination,entity-framework-6,Sql Server,Entity Framework,Sql Server 2008,Pagination,Entity Framework 6,我正在使用SQL Server 2008和实体框架6.1.3。我希望实现基于偏移量/取数而不是Take&Skip的数据分页 我在网上搜索,运气不好。一些帖子建议迁移到SQL Server 2012。这不是我的选择 是否有人可以建议如何在SQL Server 2008和EF 6.1.3中使用偏移量/获取此示例可能会帮助您在SQL Server中使用偏移量 DECLARE @PageNo INT=NULL, @RowsPerPage INT=2 ;WIth cte(id, name, qty, p

我正在使用SQL Server 2008和实体框架6.1.3。我希望实现基于偏移量/取数而不是Take&Skip的数据分页

我在网上搜索,运气不好。一些帖子建议迁移到SQL Server 2012。这不是我的选择


是否有人可以建议如何在SQL Server 2008和EF 6.1.3中使用偏移量/获取此示例可能会帮助您在SQL Server中使用偏移量

DECLARE @PageNo INT=NULL, 
@RowsPerPage INT=2
;WIth cte(id, name, qty, price)
AS
(
SELECT 2,'a', 2, 20 UNION ALL
SELECT 3,'d', 2, 10 UNION ALL
SELECT 4,'b', 3, 60
)
,cte2 AS (SELECT id, name, qty, price , 1 AS n FROM cte
UNION ALL
SELECT id, name, qty, price , n+1 From cte2 t
WHERE n< t.qty
)
SELECT
  ROW_NUMBER() OVER (ORDER BY (SELECT 1) ) AS Seq,
  id,
  name,
  qty,
  price
FROM cte2
ORDER BY 2, 3, n

OFFSET (COALESCE((CASE  WHEN @PageNo <= 0 THEN 1
                        WHEN @PageNo > 0 THEN @PageNo END), 1) - 1) ROWS
FETCH NEXT @RowsPerPage ROWS ONLY
这是可能的和以上,所以你应该确定使用它在您的项目。标准的Skip和Take方法不能以与其他方法相同的方式捕获。现在有两个额外的Skip/Take方法重载,它们接受lambda,因此,取而代之的是:

var results=context.MyTable .Skip10 .5; 这样做:

var results=context.MyTable .Skip=>10 .Take=>5;
修复方法是使用XML编辑器修改EDMX文件,并将ProviderManifestToken的值从2012更改为2008。我在EDMX文件的第7行找到了这个。保存更改后,将使用“旧的”SQL Server 2008兼容语法生成分页SQL。

感谢您的时间和努力@Srini131,但是我正在使用LINQThanks David在EF中查找一些内容,我在上面的评论中看到了您的回复,但是现在有了这个答案,我认为它现在有意义了。对我来说不起作用。我仍然在“OFFSET”附近得到不正确的语法。FETCH语句中NEXT选项的用法无效。var list=q.OrderByorderBy.Skip=>Skip.Take=>pageSize.ToList;get已按行数转换为订单,而不是按[Project1]。[PRIORITY]ASC,[Project1]。[CREATED]ASC OFFSET@p\u linq\u 1行获取下一个@p\u linq\u 2行,N'@p\u linq\u 0 varchar8000,@p\u linq\u 1 int,@p\u linq\u 2 int',@p\u linq\u 0='STS\u NEW,@p\u linq\u 1=0,@p__linq__2=12相同的代码通常适用于SQL 2012和above@DavidG为什么要用lambdas?优点是什么?@orangecaterpillar如果您阅读问答,您将看到生成的不同SQL。@DavidG我在问答中看不到SQL。SQL Server 2008不支持偏移量/FECTH语法。这一个解决了我的问题!谢谢你,伙计。它在SQLServer2008上运行,没有改变我的linq代码中的任何内容。