【问题标题】:Which would be a best way to organize the logic for Filters这将是组织过滤器逻辑的最佳方式
【发布时间】:2012-03-20 17:43:13
【问题描述】:

我想重构一个逻辑来过滤我的应用程序的网格。我只想在数据库中实现这个逻辑。

所以,我有一个网格,它显示来自数据库的更多表中的数据。有一些 textBoxescomboBoxes 为它想要的每个过滤器设置数据。

现在,它是数据库中的一个巨大的存储过程,它以这种方式工作:

最初从表中选择 [ALL DATA] 到临时表中, 在那之后, 根据填充了数据的字段(来自应用程序过滤器),它会从 [ALL DATA] 中删除 NOT LIKE SELECTED FILTER

的信息

过滤器中设置的foreach参数等等。

这种方式比较耗时,因为一开始会选择所有数据,然后慢慢删除不需要的。

我不想在客户端创建 SQL 查询。我只想对数据库这样做,或者.... iimmmm,我不知道...

哪个是最好的方法,非常优化,运行速度快,并在尽可能短的时间内返回结果?

我使用 C# 和 .NET 4.0 作为客户端,使用 MSSQL DB。

感谢您的建议。

【问题讨论】:

  • 我读到了关于使用 ORM、SQL 游标、.NET 反射,根据选定的过滤器选项进行动态 SQL 查询...哪一个是最好的方法?

标签: c# sql filter


【解决方案1】:

修改您的存储过程,使其首先只将所需数据选择到临时表中,而不是选择所有内容然后删除不需要的数据。

【讨论】:

    【解决方案2】:

    这就是 ORM 的用途。不要在客户端构建动态 SQL 语句。而是按过滤器构建 LINQ 查询过滤器。您将获得完全动态的好处,而没有 SQL 注入的风险。

    您可以查看this 的示例。

    【讨论】:

    • 好的,好的,我将添加一个示例链接。
    • 由于 ORM 是客户端和服务器之间的中介,它会使操作比直接连接运行得慢,还是以一种高效的方式工作?
    • 设计得体的 ORM 通常不会增加太多开销,除非您尝试执行非常复杂的查询。只要生成的SQL语句相同,进程内开销就可以忽略不计(数据库和网络比在内存中创建和翻译一些对象更重要)
    猜你喜欢
    • 1970-01-01
    • 2021-06-05
    • 2011-06-11
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多