我正在开发一项功能,用户可以在每个参数中选择多个具有多个值的参数。我试图找出一种方法来使用 C# 在我的应用程序中设计此功能,实体框架将实体映射到存储过程。由于安全原因,我的应用程序必须通过只有存储过程的代理数据库来访问数据库。因此,我的实体被映射到用于插入、更新和选择的存储过程。最终,我需要将用户选择的过滤器传递给存储过程以查询数据库。我想到的解决方案之一是将所有数据检索到我的业务层并使用 linq 进一步过滤掉。但这并不理想,因为内存评估器中过滤的数据量比数据库更适合执行这种复杂查询。我已经看过使用 linq 构建动态查询的帖子,但是在这些帖子中,实体被映射到表中,这使得它更容易。这里的任何帮助将不胜感激。谢谢你,sirkal
问问题
668 次
1 回答
0
EF(以及 LINQ)使用延迟执行。您可以使用 IQueryable(Google 搜索时间?)轻松创建动态查询,并在您构建的对象中创建过滤条件(您可以在没有对象的情况下执行此操作,但认为可重用)。
至于 SQL 存储过程,您还可以通过传入所有可能更改过滤器的项目并让 SQL 动态处理数据以生成结果集来解决它。
选择哪个?这实际上取决于您团队的核心竞争力在哪里。我更喜欢 C# 代码,主要是因为熟悉(花了数年时间做 sprocs,但动态 sprocs 可能是一种皇家痛苦)。
现在,您确实需要提防的一件事是最终导致服务器无法轻松调整的动态查询(例如 SQL Server 中的统计信息,尽管其他 RDBMS 使用类似的概念)。例如,我在 LINQ to SQL 中看到的一个问题是动态查询会导致 SQL 的执行效果不佳,这需要 DBA 进行大量处理。
于 2012-02-10T17:35:22.543 回答