【发布时间】:2019-03-19 06:13:55
【问题描述】:
public List<JC_PHASE_MASTER_TOTAL1_MC> GetAllByCompanyCodeJobNumber()
{
return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$"SELECT * FROM JC_PHASE_MASTER_TOTAL1_MC WHERE (Job_Number = ' 123')"
).ToList();
}
Corresponding SQL:
SELECT *
FROM JC_PHASE_MASTER_TOTAL1_MC
WHERE
(Job_Number = ' 123')
表中的 Job_Number 字段是一个 varchar 并且存储有任何未使用数字的前导空格。当我使用 Job_Number 硬编码运行上述函数时,查询会按预期运行。但是,通过将相同的值作为参数传递所产生的 SQL 看起来像这样,并且 SQL 运行似乎传递了一个数字而不是一个字符串:
public List<JC_PHASE_MASTER_TOTAL1_MC> GetAllByCompanyCodeJobNumber(string jobNumber)
{
return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$"SELECT * FROM JC_PHASE_MASTER_TOTAL1_MC WHERE (Job_Number = {jobNumber})"
).ToList();
}
Corresponding SQL with ' 123' passed to the jobNumber string parameter:
SELECT *
FROM JC_PHASE_MASTER_TOTAL1_MC
WHERE
(Job_Number = 123)
为什么传入SQL语句的字符串参数是123而不是'123'?我不确定如何调整我的函数以使参数不作为数字传递。
每个接受的解决方案的修订代码:
public List<JC_PHASE_MASTER_TOTAL1_MC>GetAllByCompanyCodeJobNumber(string jobNumber)
{
var jobNumberParameter = new SqlParameter("@jobNumber", SqlDbType.VarChar);
jobNumberParameter.Value = jobNumber;
return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$"SELECT * FROM JC_PHASE_MASTER_TOTAL1_MC WHERE (Job_Number = {jobNumberParameter})"
).ToList();
}
【问题讨论】:
-
我已经调整了我的初始帖子以隔离我的问题。与其说是关于性能的问题,不如说是意识到我创建的参数没有按我的预期传递。
-
EF Core 2.2(如标题所述),SQL Server,表字段为 varchar(如问题所述)。一旦查询工作,我将考虑重构和清理代码。在那之前,我宁愿找出问题的原因。