SQL поиск с логическими операторами

У меня есть веб-приложение asp.net, которому нужна страница поиска, которая ищет данные в определенной таблице (SQL). На сегодняшний день она имеет только простой запрос LIKE, использующий параметризованный 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)

Добавление полнотекстового индексирования в таблицу не является предпочтительным вариантом, поскольку я не контролирую модель данных.

Я ищу метод интерпретации текстовых запросов и преобразования их в SQL-запрос с соответствующим количеством SqlParams.

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)"

И sqlParams вроде

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

Должен же быть кто-то, кто уже делал что-то подобное? Я искал и на SO, и в Google без какого-либо реального успеха. И указатели на открытый/бесплатный код или хорошую идею о том, как преобразовать поисковое выражение в SQL, приветствуются.

9
задан Johan - reinstate Monica 1 December 2011 в 11:40
поделиться