C# EF Sql查询参数不返回结果

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.

我有一个从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.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(),当然,这很可能会导致返回太多的内容而无法在之后进行过滤