在实体框架中进行分页

dev*_*dev 31 entity-framework

在实体框架中,使用LINQ to Entities,数据库分页通常以下列方式完成:

int totalRecords = EntityContext.Context.UserSet.Count;
var list     = EntityContext.Context.UserSet
                 .Skip(startingRecordNumber)
                 .Take(pageSize)
                 .ToList();
Run Code Online (Sandbox Code Playgroud)

这导致两个数据库调用.

请告诉我,如何将其减少到一个数据库调用.

谢谢.

Cas*_*rns 36

两个电话有什么问题?它们是小而快速的查询.数据库旨在支持大量小型查询.

开发一个复杂的解决方案来为分页执行一个查询不会给你带来太多回报.


dev*_*dev 8

使用Esql并将存储过程映射到实体可以解决问题.SP将返回totalRows作为输出参数,将当前页面作为结果集返回.

CREATE PROCEDURE getPagedList(
@PageNumber int,
@PageSize int,
@totalRecordCount int OUTPUT
AS

//Return paged records
Run Code Online (Sandbox Code Playgroud)

请指教.

谢谢.


mar*_*c_s 5

嗯...使用分页的实际呼叫是第二个-这是单个呼叫。

第二个调用是确定行的总数-这是一个完全不同的操作,而且我不知道有什么方法可以将这两个不同的操作组合到带有实体框架的单个数据库调用中。

问题是:您真的需要总行数吗?做什么的?这值得进行第二次数据库调用吗?

您将拥有的另一种选择是使用EntityObjectSource(在ASP.NET中),然后将其绑定到GridView,然后在GridView上启用AllowPaging和AllowSorting等,然后让ASP.NET运行时处理所有细碎的工作检索适当的数据页面并显示它。

  • 您需要总记录,因此您知道分页界面中有多少页。我不知道您是否可以只做一个list.Count之类的? (3认同)