构建动态选择的最佳技术
本文关键字:最佳 技术 选择 动态 构建 | 更新日期: 2023-09-27 18:25:25
我在一个表单中有几个过滤器字段,这些字段将构建将填充GridView
的选择语句的 where 表达式。用户还可以为每个字段选择运算符(> <>= <= like(。考虑到利弊,我想知道完成此任务的最佳技术。
我得出了一些结论:
- Linq:不能灵活地使用多种可能性和多个运算符。
- 存储过程:在 proc 和 where 子句中创建多个参数 make
(table.description = isnull(@description, table.description)
但这不允许我们使用多个运算符。 - 在 Proc 中使用
exec('Statement')
。这样我们就可以动态构建查询,但查询中充满了引号,调试和修改很无聊,不确定性能。 - 代码中的动态语句,但这样我们错过了过程性能。
专家通常如何做?最好的方法是什么?
你的最后一句话不正确。如果使用实体框架,则可以使用本机或 EntityCommand 在字符串中动态构建查询;没有证据表明它的性能会低于使用存储过程,除非您对其进行测试。
我一直在使用以下方法:
- 运行筛选器表达式
- 对于每个筛选器表达式,向 WHERE 子句添加一个筛选器(您正在构建一个 SQL 字符串(
- 对于每个筛选器表达式,如果需要,将参数信息添加到列表中(您正在构建字典
<ParameterName, ParameterValue>
( - 处理完所有筛选表达式后,从 SQL 字符串生成查询,并从字典中添加参数。