Entity framework core EF Core 2.2,将字符串参数传递给FromSql语句 公共列表GetAllByCompanyCodeJobNumber() { 返回_context.JC_PHASE_MASTER_TOTAL1_MC.FromSql( $“从JC\u阶段\u主控\u总计1\u MC中选择*,其中(作业编号='123')” ).ToList(); } 对应的SQL: 挑选* 来自JC_阶段_主控_总计1_MC 哪里 (作业编号='123')

Entity framework core EF Core 2.2,将字符串参数传递给FromSql语句 公共列表GetAllByCompanyCodeJobNumber() { 返回_context.JC_PHASE_MASTER_TOTAL1_MC.FromSql( $“从JC\u阶段\u主控\u总计1\u MC中选择*,其中(作业编号='123')” ).ToList(); } 对应的SQL: 挑选* 来自JC_阶段_主控_总计1_MC 哪里 (作业编号='123'),entity-framework-core,Entity Framework Core,表中的Job_Number字段是一个varchar字段,并使用前导空格存储任何未使用的数字。当我使用作业号硬编码运行上述函数时,查询将按预期运行。但是,通过传递与参数相同的值生成的SQL如下所示,SQL运行似乎传递的是数字而不是字符串: public List<JC_PHASE_MASTER_TOTAL1_MC> GetAllByCompanyCodeJobNumber() { return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql

表中的Job_Number字段是一个varchar字段,并使用前导空格存储任何未使用的数字。当我使用作业号硬编码运行上述函数时,查询将按预期运行。但是,通过传递与参数相同的值生成的SQL如下所示,SQL运行似乎传递的是数字而不是字符串:

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')
公共列表GetAllByCompanyCodeJobNumber(字符串jobNumber)
{
返回_context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$“从JC_PHASE_MASTER_TOTAL1_MC中选择*,其中(作业编号={jobNumber})”
).ToList();
}
传递给jobNumber字符串参数的具有“123”的对应SQL:
挑选*
来自JC_阶段_主控_总计1_MC
哪里
(作业编号=123)
为什么字符串参数作为123而不是“123”传递到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)
public ListGetAllByCompanyCodeJobNumber(字符串jobNumber)
{
var jobNumberParameter=新的SqlParameter(“@jobNumber”,SqlDbType.VarChar);
jobNumber参数。值=jobNumber;
返回_context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$“从JC_PHASE_MASTER_TOTAL1_MC中选择*,其中(作业编号={jobNumberParameter})”
).ToList();
}

您是否尝试过显式设置SQL数据类型,例如:

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();
}
public ListGetAllByCompanyCodeJobNumber(字符串jobNumber)
{
var jobNumberParameter=新的SqlParameter(“@jobNumber”,SqlDbType.VarChar);
jobNumber参数。值=jobNumber;
返回_context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$“从JC_PHASE_MASTER_TOTAL1_MC中选择*,其中(作业编号={jobNumberParameter})”
).ToList();
}

我已经调整了我的初始帖子,以隔离我的问题。与其说是关于性能的问题,不如说是我意识到我创建的参数没有按照我的预期传递。EF Core 2.2(如标题所述),SQL Server,表字段是varchar(如问题中所述)。一旦查询生效,我将考虑重构和清理代码。在此之前,我宁愿找出问题的原因。谢谢,这将引导我走上解决问题的道路。我已经用我最终使用的代码更新了我的帖子。当时我没有一台机器可以测试,很高兴它能让你离我足够近,我已经将我的答案与你更新的问题对齐
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();
}