Если вы выполните этот запрос 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, который вы написали бы в своей хранимой процедуре, нов смысле производительности это то же самое.Разбивка на страницы производится в базе данных.