2016-03-28 4 views
0

Я ищу сделать что-то вроде:Как использовать SQL-параметры в предложении CONTAINS?

select * from MyValues 
where CONTAINS(MyValues.Value, ' @p0 OR @p1 OR @p2 or @p3 ') 

я выполняю запрос через SQLQuery EF в() метод, как:

query = context.Database.SqlQuery<MyResult>(@"select * from MyValues 
    where CONTAINS(MyValues.Value, '@p0 OR @p1 OR @p2 OR @p3')", 
    new SqlParameter("@p0", "Cat"), 
    new SqlParameter("@p1", "Green"), 
    new SqlParameter("@p2", "Red"), 
    new SqlParameter("@p3", "Dog")); 

Команда выполняет штраф, без исключения, но я не получаю любые результаты. Когда я вручную использую строки вместо параметров, я получаю ожидаемые результаты. Я пробовал различные формы и комбинации кавычек, но безрезультатно.

Разрешены ли SQL-параметры внутри выражения CONTAINS?

Спасибо!

ответ

0

Поскольку функция CONTAINS использует одну строку, я не верю, что вы можете использовать параметры, как они есть у вас. Вы можете попытаться создать полную строку и передать это как единственный параметр. Пока строка, которую вы создаете, затем передается как параметр, я считаю, что вы избежите любых проблем с возможной инъекцией SQL.

0

Может быть, вы можете попробовать это.

query = context.Database.SqlQuery<MyResult>(@"select * from MyValues) 

Как только вы получите свой список.filter, используйте нижеследующий запрос. Сначала поместите все свои параметры в массив строк.

string[] paramValues= [p1,p2,p3,p4] 
var results=query.where(r=> paramValues.Contains(r.Value)); 

Примечание: Если это ResultSet huge.it не очень хорошая идея, чтобы вернуть все результаты переднего конца и сделать filter.in большинстве случаев у вас есть другие условия для фильтрации.

Смежные вопросы