如何在CONTAINS子句中使用SQL参数?

时间:2016-03-28 16:39:06

标签: sql sql-server full-text-search sqlparameters

我希望做类似的事情:

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

命令很好,没有例外,但我没有收到任何结果。当我手动使用字符串代替参数时,我得到了预期的结果。我尝试了各种形式和引号组合,但无济于事。

CONTAINS表达式中是否允许SQL参数?

谢谢!

2 个答案:

答案 0 :(得分:0)

因为CONTAINS函数使用单个字符串,所以我不相信您可以使用参数。您可以尝试构建完整的字符串,然后将其作为单个参数传递。只要您构建的字符串然后作为参数传入,我相信您将避免任何可能的SQL注入问题。

答案 1 :(得分:0)

可能你可以试试这个。

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

注意:如果你的结果集是巨大的。将所有结果返回到前端并进行过滤不是一个好主意。在大多数情况下,你还有其他条件需要过滤。