该文档仅显示如何绑定到IEnumerable(使用linq进行分页和排序)...但我需要反对sproc,因为表达我正在使用linq进行的查询证明有点慢。
任何人都可以提供有关最佳方法的指导或指示吗?
答案 0 :(得分:6)
您需要使用custom binding。链接的示例显示了如何获取当前页面。
答案 1 :(得分:3)
您是在谈论如何将Telerik网格绑定到存储过程发出的结果集,或者如何在存储过程中实现分页?你的问题并不清楚。
以下T-SQL存储过程是一种非常高效的分页实现。 SQL优化器可以非常快速地找到第一个ID。将此与ROWCOUNT结合使用,您就拥有了一种既节省CPU又具有读取效率的方法。对于具有大量行的表,它肯定胜过我使用临时表或表变量看到的任何方法。
CREATE PROCEDURE dbo.PagingTest
(
@PageNumber int,
@PageSize int
)
AS
DECLARE @FirstId int, @FirstRow int
SET @FirstRow = ( (@PageNumber - 1) * @PageSize ) + 1
SET ROWCOUNT @FirstRow
-- Add check here to ensure that @FirstRow is not
-- greater than the number of rows in the table.
SELECT @FirstId = [Id]
FROM dbo.TestTable
ORDER BY [Id]
SET ROWCOUNT @PageSize
SELECT *
FROM dbo.TestTable
WHERE [Id] >= @FirstId
ORDER BY [Id]
SET ROWCOUNT 0
GO
答案 2 :(得分:0)
RoadWarrior为您提供了一个分页sproc的好例子,korchev指出了自定义绑定。
实际上,只要你以IEnumerable的形式获得数据,数据来自哪里是无关紧要的,所以只需编写你的数据访问代码,然后在自定义绑定之后将数据输出到List中容易。