C# 使用逻辑运算符的SQL搜索

C# 使用逻辑运算符的SQL搜索,c#,sql,sql-server,sql-server-2008,search,C#,Sql,Sql Server,Sql Server 2008,Search,我有一个asp.net web应用程序,它需要一个搜索页面来搜索特定表(SQL)中的数据。今天,它只有一个简单的查询,使用参数化sql: SqlParameter[] param = new SqlParameter[1]; param[0] = new SqlParameter("@searchText", SqlDbType.VarChar); param[0].Value = "%" + text + "%"; using (SqlDataReader dr = SqlHelper.E

我有一个asp.net web应用程序,它需要一个搜索页面来搜索特定表(SQL)中的数据。今天,它只有一个简单的查询,使用参数化sql:

SqlParameter[] param = new SqlParameter[1];

param[0] = new SqlParameter("@searchText", SqlDbType.VarChar);
param[0].Value = "%" + text + "%";

using (SqlDataReader dr = SqlHelper.ExecuteReader(this.ConnectionString, CommandType.StoredProcedure, "isp_Search", param))
{
       //Do something
}
现在我需要在搜索中添加使用逻辑运算符的选项

因此,用户可以在文本框中搜索以下内容

Adam OR Adams
James AND NOT Jame
Douglas AND (Adam OR Adams)
向表中添加全文索引不是首选选项,因为我不控制数据模型

我正在寻找一种解释文本查询并将其转换为具有适当数量的SqlParams的SQL语句的方法

searchexpression = "Douglas AND (Adam OR Adams)"
MakeSearchQuery(searchexpression, out sqlquery, out SqlParam[] params)
会像这样返回吗

sqlquery = "SELECT someFields FROM table WHERE someField=@Param1 AND (someField=@Param2 OR someField=@Param3)"
还有一个像

sqlParam[0] = 'Douglas'
sqlParam[1] = 'Adam'
sqlParam[2] = 'Adams'

现在肯定有人以前做过这样的东西?我搜索过SO和Google,但都没有真正的成功。欢迎指向开源/免费代码或如何将搜索表达式转换为SQL的好主意的指针。

通过And/or/()等对查询进行解析需要通过某种解析器完成。对于这样简单的事情,a应该做得很好(这是我们在筛选标记上的SE时如何处理and/or/not等,尽管对括号内的子表达式的完全支持仅在内部可用)。这将生成一个操作树,即(这里使用前缀表示,但更通常用于生成AST)


然后需要使用它来生成TSQL。这不是小事,但也不是火箭科学。

您使用哪种SQL引擎,答案因数据库而异。有些支持regexp,有些不支持。
and("Douglas", or("adam", "adams"))