【发布时间】:2011-03-25 05:34:35
【问题描述】:
文档只显示了如何绑定到 IEnumerable(它使用 linq 进行分页和排序)......但我需要反对 sproc,因为事实证明我正在使用 linq 表达查询有点慢。
任何人都可以提供任何指导或指示,说明什么是最好的方法吗?
【问题讨论】:
标签: stored-procedures pagination telerik telerik-grid telerik-mvc
文档只显示了如何绑定到 IEnumerable(它使用 linq 进行分页和排序)......但我需要反对 sproc,因为事实证明我正在使用 linq 表达查询有点慢。
任何人都可以提供任何指导或指示,说明什么是最好的方法吗?
【问题讨论】:
标签: stored-procedures pagination telerik telerik-grid telerik-mvc
您需要使用custom binding。链接的示例显示了如何获取当前页面。
【讨论】:
您是在谈论如何将 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
【讨论】:
RoadWarrior 为您提供了一个很好的分页存储过程示例,并且 korchev 为您指出了自定义绑定。
实际上,只要您以 IEnumerable 的形式获取数据,数据的来源就无关紧要,因此只需编写数据访问代码,然后在自定义绑定之后将数据放入 List容易。
【讨论】: