Как я могу использовать параметры SQL в предложении CONTAINS?

Я хочу сделать что-то вроде:

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

Я выдаю запрос через метод EF SqlQuery(), например:

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?

Спасибо!

2 ответа

Решение

Поскольку CONTAINS Функция использует одну строку, я не верю, что вы можете использовать параметры, как у вас есть. Однако вы можете попытаться создать полную строку и передать ее как один параметр. Пока строка, которую вы строите, передается как параметр, я полагаю, что вы избежите проблем с возможным внедрением SQL.

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

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

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

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

Примечание. Если ваш набор результатов огромный. Не рекомендуется возвращать все результаты во внешний интерфейс и выполнять фильтрацию. В большинстве случаев у вас есть другие условия для фильтрации.

Другие вопросы по тегам