【问题标题】:server side paging with business logic filtering带有业务逻辑过滤的服务器端分页
【发布时间】:2011-11-05 10:37:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# asp.net sql-server-2005 pagination


    【解决方案1】:

    我会说,如果您担心生产中出现内存不足异常,要么硬件容量不足以容纳您拥有的数据量,要么您的代码非常错误:)

    我会做的一切都是一个存储过程,包括过滤、分页和排序。一旦您在服务器中对此进行了排序并指定了需要检索的页面大小和页面索引,存储的过程只会返回您正在查找的已排序的单页记录,您可以将其绑定到您的 UI控制。

    这是你想要的还是我误会了?

    【讨论】:

    • 但是过滤很复杂,无法将其放入存储过程中。
    • 那么必须简化,你能举一些例子来说明你如何过滤编辑你的问题吗?
    • 过滤代码是在一个安全模块中用c#编写的。它用于通过 userProfileID 参数和为每个配置文件定义的一组权限进行基于行的安全过滤。
    【解决方案2】:

    如果您使用的是 .net 4.0,IQueryable 是一个可行的选择。有关详细信息,请参阅here。基本上,IQueryable 会延迟查询的执行,因此您可以应用业务逻辑,然后从底层数据存储(在您的情况下为 sql 服务器)获取 相关 数据。 但是,在走这条路之前,我会对查询性能进行一些微基准测试。

    【讨论】:

    • 问题是从数据库中获取后,我根据一些用c#编写的安全业务规则逻辑过滤结果,所以需要从结果集中删除一些记录,所以总行数counter 需要减去那些从结果集中删除的行。
    • 你能粘贴一些在你的业务层中进行过滤的示例代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2017-08-08
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多