【发布时间】:2015-10-09 11:31:06
【问题描述】:
在我的项目中,我需要对查询进行分页。我使用实体框架从数据库中获取数据。 This video on youtube 解释如何对查询进行分页。简而言之,视频说您所要做的就是将 PagedList.Mvc 安装到您的项目和此代码中
.ToPagedList(PageNumber,PageSize)
首先,这似乎对我有用,但我发现(在使用 Sql server 配置文件检查什么实体框架传递给 sql server 之后)实体框架向 sql server 询问所有数据,然后选择需要的数据。更清楚地说,这是我在 c#(服务器端)上的代码
var messages = db.Messages.Where(x => x.User1 == 1 && x.User2 == 2).OrderBy(x=>x.Date).ToList().ToPagedList(1,4);
传递给 sql server 的是这样的:
exec sp_executesql N'SELECT
[Project1].[Id] AS [Id],
[Project1].[User1] AS [User1],
[Project1].[User2] AS [User2],
[Project1].[Direction] AS [Direction],
[Project1].[TextContent] AS [TextContent],
[Project1].[ReadBit] AS [ReadBit],
[Project1].[Date] AS [Date],
[Project1].[ReceivedBit] AS [ReceivedBit]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent1].[User1] AS [User1],
[Extent1].[User2] AS [User2],
[Extent1].[Direction] AS [Direction],
[Extent1].[TextContent] AS [TextContent],
[Extent1].[ReadBit] AS [ReadBit],
[Extent1].[ReceivedBit] AS [ReceivedBit],
[Extent1].[Date] AS [Date]
FROM [Messages].[Messages] AS [Extent1]
WHERE ([Extent1].[User1] = @p__linq__0) AND ([Extent1].[User2] = @p__linq__1)
) AS [Project1]
ORDER BY [Project1].[Date] ASC',N'@p__linq__0 int,@p__linq__1 int',@p__linq__0=1,@p__linq__1=2
所以 sql server 中没有分页,我认为这样的分页没有优势。我是否错过了一些不起作用的东西?还是这样工作?
【问题讨论】:
-
你里面为什么有
.ToList()? -
.ToPagedList()使用.Skip()和.Take()但您首先使用.ToList()实现了查询 -
我认为这可以解决问题。
-
我对此进行了测试,它确实解决了我的问题。请发表您的评论作为答案,以使其成为真实的@GertArnold
标签: c# sql-server asp.net-mvc entity-framework pagedlist