C# EF Sql查询参数不返回结果
我有一个从db返回140行的工作查询:C# EF Sql查询参数不返回结果,c#,entity-framework,ado.net,C#,Entity Framework,Ado.net,我有一个从db返回140行的工作查询: string tag = "New York"; string sql = "select " + " T.Id TagId, " + " PM.Id MachineId, " + $" '{tag}' TagSiteName, " + " T.Name TagCpeMachineLine, " + " PM.Plant, " + " PM.Line, " + " PM.
string tag = "New York";
string sql = "select " +
" T.Id TagId, " +
" PM.Id MachineId, " +
$" '{tag}' TagSiteName, " +
" T.Name TagCpeMachineLine, " +
" PM.Plant, " +
" PM.Line, " +
" PM.Type " +
"from Tags T " +
"inner join PaperMachines PM " +
" ON PM.Id = T.PaperMachineId " +
$"WHERE T.Name LIKE ( '{tag}' ) ";
var result = db.Database.SqlQuery<TagsMachines>(sql);
string tag=“纽约”;
string sql=“选择”+
“T.Id TagId,”+
“PM.Id机器Id,”+
$“{tag}”标记站点名称+
“T.名称TagCpeMachineLine,”+
“PM.工厂,”+
“下午线,”+
“PM.Type”+
“从标签T”+
“内连接造纸机PM”+
“在PM.Id=T.Id时”+
$“其中T.Name类似({tag}')”;
var result=db.Database.SqlQuery(sql);
当我尝试参数化它时,我从结果中得到“枚举未产生任何结果”
string tag = "New York";
string sql = "select " +
" T.Id TagId, " +
" PM.Id MachineId, " +
" '@tag' TagSiteName, " +
" T.Name TagCpeMachineLine, " +
" PM.Plant, " +
" PM.Line, " +
" PM.Type " +
"from Tags T " +
"inner join PaperMachines PM " +
" ON PM.Id = T.PaperMachineId " +
"WHERE T.Name LIKE ( '@tag' ) ";
var result = db.Database.SqlQuery<TagsMachines>(sql, new SqlParameter("@tag", tag));
string tag=“纽约”;
string sql=“选择”+
“T.Id TagId,”+
“PM.Id机器Id,”+
“@tag”TagSiteName,”+
“T.名称TagCpeMachineLine,”+
“PM.工厂,”+
“下午线,”+
“PM.Type”+
“从标签T”+
“内连接造纸机PM”+
“在PM.Id=T.Id时”+
“其中T.类似于('@tag')”的名称”;
var result=db.Database.SqlQuery(sql,新的SqlParameter(“@tag”,tag));
我不知道这里发生了什么。有什么想法吗?删除查询顶部的@标记,并在查询底部创建它
T.Name=@tag或T.Name like('%'+@tag+'%')
如果您想要like包含。最后,在结果行末尾添加
a.FirstOrDefault()。
删除参数所有实例周围的引号。它应该是@tag
,永远不要'@tag'
,除非您希望使用/返回逐字字符串值'@tag'
。我想这可能与单引号有关。我确实在tag参数周围删除了它们,但是类似于('%'+@tag+'%')的T.Name不起作用。我查看了另一个线程:并在实际的sql参数值中添加了通配符%:var result2=db.Database.SqlQuery(sql2,新的SqlParameter(“@tag”,$“{tag}%”);Yeah应该是双引号而不是单引号,比如“%”“++@tag+”%”,或者您可以省略整个SqlParameter off,而在查询之后使用一个过滤器,比如.Where(i=>TagSiteName.Contains(tag)).ToList(),当然,这很可能会导致返回太多的内容而无法在之后进行过滤