如何在 EntityFramework 6 中编写原始 SQL 命令

问题描述 投票:0回答:2

我正在尝试做一个类似于这个的原始 SQL 语句

从 db.T0590_CODE_STRING 中删除 (1,1,2,3,5)

IN 子句中的值来自 rowIds 列表,因此我尝试使用 string.Join() 但随后值被实现为字符串而不是整数。有解决方法吗?

public void DeleteRow(List<int> rowIds)
{
    using (var db = new SkataModel())
    {
        var list = "(" + string.Join(", " , rowIds.Select(s => s)) + ")";
        db.Database.ExecuteSqlCommand("DELETE FROM db.T0590_CODE_STRING WHERE IN " + list);
            
        db.SaveChanges();
    }
}

如果有人了解如何使用 Linq 或 PreparedStatements 执行此操作,我们也将不胜感激。

c# sql entity-framework-6 sqlcommand in-clause
2个回答
1
投票

你可以改变这条线

var list = "(" + string.Join(", " , rowIds.Select(s => $"'{s}'")) + ")";

1
投票

由于您似乎对其他方法持开放态度,因此请使用 QueryFirst。在你的 .sql 文件中,把

DELETE FROM db.T0590_CODE_STRING WHERE IN (@IdsToDelete)

QueryFirst 将检测参数,然后生成一个带有执行方法的存储库类,正确推断您需要一个整数列表,而不是单个值。 C# 类型将自动反映底层的 db 类型,通常是 int(但不总是)。没有字符串操作,没有 sql 注入,并且您的 sql 不断得到验证。

  • 免责声明 - 我写了 QueryFirst
© www.soinside.com 2019 - 2024. All rights reserved.