我正在尝试做一个类似于这个的原始 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 执行此操作,我们也将不胜感激。
你可以改变这条线
var list = "(" + string.Join(", " , rowIds.Select(s => $"'{s}'")) + ")";
由于您似乎对其他方法持开放态度,因此请使用 QueryFirst。在你的 .sql 文件中,把
DELETE FROM db.T0590_CODE_STRING WHERE IN (@IdsToDelete)
QueryFirst 将检测参数,然后生成一个带有执行方法的存储库类,正确推断您需要一个整数列表,而不是单个值。 C# 类型将自动反映底层的 db 类型,通常是 int(但不总是)。没有字符串操作,没有 sql 注入,并且您的 sql 不断得到验证。