c# - 将自定义搜索过滤器转换为动态 SQL

标签 c# asp.net sql search

我正在编写一个允许人们搜索艺术品的自定义搜索页面,但我希望允许用户在搜索框中输入自定义命令/标签,让他们可以直接控制过滤结果而无需使用任何东西但搜索框。让我举个例子...

我希望用户能够在文本框中输入如下内容:

Textbox Input: color=red|blue|green value>=5.00+<=10.00

这将转换为以下 SQL,我可以将其挂接到 SQL 查询的末尾:

AND (Artwork.Color = 'red' OR Artwork.Color = 'blue' OR Artwork.Color = 'green')
AND (Artwork.Price >= 50.00 AND Artwork.Price <= 100.00)

你怎么看...

1) 允许人们将这些自定义命令键入文本框并将这些命令转换为 SQL,这是正常做法吗?如果不是,我还能如何允许传递高级搜索选项,同时保持页面简单?

2) 将这些自定义命令转换为 SQL 的最佳方式,我如何转换未知数量的由潜在多个运算符 (+、|) 分割的过滤器?

这是一个使用 ASP.NET (C#) 和 MSSQL 构建的 Web 项目。提前致谢! :)

最佳答案

就我个人而言,我一直在为所有搜索选项创建一个 UI,其中包含有效输入控件(复选框列表、日期选择器等)。尽管一开始这听起来很痛苦,但我认为一旦您提出 SQL ish 系统、转换它并使其安全后,它的效果是一样的。它对非极客也更加友好。

您始终可以将选项隐藏在标有“搜索选项”的隐藏面板中,然后它可以在需要时弹出,不需要时释放屏幕。

关于c# - 将自定义搜索过滤器转换为动态 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6138843/

相关文章:

c# - C# dot net 中的 webrtc 信令服务器

c# - 一次性使用模式

asp.net - Web.Config 中的 Assemblies 节点的用途是什么?

asp.net - 如何更改身份验证模式(从 Windows 到 Azure AD)

c# - JSON序列化属性名称以特殊字符开头的匿名对象

sql - 分组依据汇总和计数(不同)

sql - 在 SQL 中,为什么用户配置文件通常用 2 个单独的表来完成?

mysql - 如果重复插入则更新? w 在 INSERT 上自动增加 P​​K?

c# - 从数据库中获取特定时间间隔的值

c# - 嵌套开关语句 : Architectural Design Issue