我希望做类似的事情:
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参数?
谢谢!
答案 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));
注意:如果你的结果集是巨大的。将所有结果返回到前端并进行过滤不是一个好主意。在大多数情况下,你还有其他条件需要过滤。