C# 执行ExecuteStoreQuery时将通配符作为sqlparameter.Value传递

C# 执行ExecuteStoreQuery时将通配符作为sqlparameter.Value传递,c#,sql-server,asp.net-mvc,C#,Sql Server,Asp.net Mvc,我正在使用一个数据库模型,并尝试使用.ExecuteStoreQuery函数查询一些数据 我的SQL语句如下所示 SELECT * FROM t WHERE f1 LIKE @pr1 AND f2 LIKE @pr2 AND f3 LIKE @pr3 现在,正如您所看到的,我使用了3个参数:@pr1,2,3 context.ExecuteStoreQuery(SQL_string, new SqlParameter { ParameterName = "pr1", Value = fi

我正在使用一个数据库模型,并尝试使用
.ExecuteStoreQuery
函数查询一些数据

我的SQL语句如下所示

SELECT * FROM t WHERE f1 LIKE @pr1 AND f2 LIKE @pr2 AND f3 LIKE @pr3
现在,正如您所看到的,我使用了3个参数:@pr1,2,3

context.ExecuteStoreQuery(SQL_string,
new SqlParameter {
  ParameterName = "pr1",
  Value = filterVal1
},
new SqlParameter {
  ParameterName = "pr2",
  Value = filterVal2
},
new SqlParameter {
  ParameterName = "pr3",
  Value = filterVal3 == 0 ? filterVal3.ToString() : "%"
});
如您所见,根据条件的不同,我希望使用filterVal3的实数值或通配符%,以便在最后执行sql语句时,它将根据其他2个参数选择记录

问题是,“%”被转换成我所不期望的内容,并且查询返回空集。我试图在SQL_字符串中用“%”替换@pr3,它实际上给出了我需要的结果

那么,如何使用SqlParameter让它工作呢


希望我说的很清楚。

我在访问数据库时遇到了一个类似的问题-解决方案是在c代码中用*替换%。
但我不知道它为什么会起作用:-/

您可以在存储过程中完成它

SELECT * 
FROM t 
WHERE f1 LIKE @pr1 + '%' 
    AND f2 LIKE '%' + @pr2 + '%' --if you want to search this way
    AND f3 LIKE @pr3 + '%'

这里的问题是睡眠不足

它实际上按预期工作。 在询问某某之前,我花了将近2个小时在谷歌上搜索,现在我的眼睛终于睁开了

new SqlParameter {
  ParameterName = "pr3",
  Value = filterVal3 == 0 ? filterVal3.ToString() : "%"
});
这里的陈述是错误的。当我调试时,我期望值
filterVal3
为0,在这种情况下,我的想法是在执行查询时“忽略”f3字段,但我不小心切换了true:false,这会导致错误的结果

正确的一点是:

new SqlParameter {
  ParameterName = "pr3",
  Value = filterVal3 != 0 ? filterVal3.ToString() : "%"
});
抱歉浪费你们的时间:(