2011-08-28 119 views
1

我需要显示网格标题的总行数。网格也必须处理大量的记录。 所以我决定使用网格自定义分页功能。 我知道如何做服务器端分页与sql2005 ROW_NUMBER等 但我的困难是在业务逻辑层完成复杂的行基地过滤。 我认为首先对大量记录进行复杂过滤(以了解项目数量)效率并不高,也可能会导致内存不足异常。带有业务逻辑过滤的服务器端分页

此时此项目(asp.net web应用程序)正在使用.net framework1.1,sql2005进行生产。 生产的下一个版本将使用.net framework4.0。之后我们将升级到sql2008。

请帮我找到解决方案的问题? 谢谢。

回答

0

我想说,如果你怕出在生产内存例外的任何硬件是不够大的,你拥有的数据量或者你的代码确实是严重错误:)

我会完成这一切是存储过程,包括过滤,分页和排序。一旦你在服务器中进行了整理,并且你已经指定了你需要检索的页面大小和pag索引,那么存储过程只返回你正在查找的已经排序的单页记录,并且你可以将它绑定到你的UI控制。

这是你想要的还是我让你错了?

+0

但过滤是复杂的,把它放在一个存储过程。 –

+0

然后必须简化,你可以显示一些关于如何过滤编辑你的问题的例子吗? –

+0

过滤代码是用c#在安全模块中编写的。它用于通过userProfileID参数进行行基安全筛选,并为每个配置文件定义一组权限。 –

0

如果您使用.net 4.0,IQueryable是一个可行的选项。详情请参阅here。基本上,IQueryable会延迟查询的执行,以便您可以应用业务逻辑,然后从底层数据存储(您的案例中为sql server)获取相关的数据。 但是,在走下这条路线之前,我会做一些查询性能的微观基准测试。

+0

问题是,在从数据库获取数据后,我按照某些用C#编写的安全业务规则逻辑过滤结果,因此有些记录需要从结果集中删除,因此总计行数需要减去那些数据行已从结果集中移除。 –

+0

您能否在业务层中粘贴一些正在执行的过滤示例代码? – Kiran