如果要从MSSQL表中检索从20到39或从40到59的记录。
由于我使用的是MVC和EF4,如果我只执行一个Linq查询,然后跳过()和使用()过程来请求分页....or,性能是否相同呢?是不是在GetList()存储过程本身上这样做更好?
发布于 2011-03-18 07:37:05
如果执行此linq查询:
var data = context.Posts.OrderBy(p => p.Id).Skip(20).Take(20).ToList();它将生成以下SQL:
SELECT TOP (20)
[Extent1].[Id] AS [Id],
[Extent1].[Text] AS [Text]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Text] AS [Text],
row_number() OVER (ORDER BY [Extent1].[Id] ASC) AS [row_number]
FROM [dbo].[Posts] AS [Extent1]
) AS [Extent1]
WHERE [Extent1].[row_number] > 20
ORDER BY [Extent1].[Id] ASC它不像您在存储过程中编写的自定义SQL那么好,但在性能意义上是相同的。分页是在数据库上完成的。
https://stackoverflow.com/questions/5345939
复制相似问题