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

Imm*_*tal 2 sql-server pagination entity-framework sql-server-2008 entity-framework-6

我正在使用SQL Server 2008和Entity Framework 6.1.3.我希望实现基于OFFSET/FETCH而不是Take()&Skip()的数据分页.

我在线搜索没有运气.有些帖子建议迁移到SQL Server 2012.在我的情况下,这不是一个选项.

有人可以建议如何在SQL Server 2008和EF 6.1.3中使用OFFSET/FETCH

Dav*_*idG 7

使用Entity Framework 6.1.2及更高版本可以实现这一点,因此您可以在项目中使用它.标准的Skip and Take方法无法以与其他方式相同的方式捕获.现在有两个额外的Skip/Take方法重载采用lambdas,所以不是这样:

var results = context.MyTable
    .Skip(10)
    .Take(5);
Run Code Online (Sandbox Code Playgroud)

做这个:

var results = context.MyTable
    .Skip(() => 10)
    .Take(() => 5);
Run Code Online (Sandbox Code Playgroud)


Dan*_*nCZ 5

修复方法是使用 XML 编辑器修改您的 EDMX 文件,并将 ProviderManifestToken 的值从 2012 年更改为 2008 年。我在 EDMX 文件的第 7 行发现了这一点。保存该更改后,将使用“旧”的 SQL Server 2008 兼容语法生成分页 SQL。