构建动态选择的最佳技术

时间:2014-10-03 17:03:45

标签: c# sql asp.net

我在表单中有几个过滤器字段,用于构建将填充GridView的select语句的where表达式。用户还可以为每个字段选择运算符(><> =< = like)。考虑到优点和缺点,我想知道完成这项任务的最佳技术。

我得出了一些结论:

  • Linq:与多种可能性和多个运营商合作不灵活。
  • 存储过程:在proc和where子句中创建几个参数make (table.description = isnull(@description, table.description),但这不允许我们与多个运算符一起使用。
  • 在Proc中使用exec('Statement')。这样我们就可以动态地构建查询,但查询中充满了引号,调试和修改很无聊,不确定性能。
  • 代码中的动态语句,但这样我们就错过了程序性能。

专家通常如何做?什么是最好的方法?

1 个答案:

答案 0 :(得分:1)

您的上一个陈述不正确。如果使用Entity Framework,您可以使用native或EntityCommand以字符串形式构建查询;除非你测试它,否则没有证据表明它比使用存储过程的性能更差。

我一直在使用以下方法:

  • 运行过滤器表达式
  • 对于每个过滤器表达式,向WHERE子句添加过滤器(您正在构建SQL字符串)
  • 对于每个过滤器表达式,如果需要,将参数信息添加到列表中(您正在构建字典<ParameterName, ParameterValue>
  • 处理完所有过滤器表达式后,从SQL字符串构建查询并添加字典中的参数。