Sql server EF Core ExecuteSqlCommandAsync:转换nvarchar值时失败';1,2';到数据类型int

Sql server EF Core ExecuteSqlCommandAsync:转换nvarchar值时失败';1,2';到数据类型int,sql-server,entity-framework,asp.net-core-2.0,ef-core-2.0,Sql Server,Entity Framework,Asp.net Core 2.0,Ef Core 2.0,我正在运行执行原始sql以删除我为测试添加的一些记录。如果我在ManagementStudio中运行相同的查询,它可以正常工作,但当我运行该查询EFCore2.0时,它会抛出以下错误 System.Data.SqlClient.SqlException: 'Conversion failed when converting the nvarchar value '1,2' to data type int.' 代码 查询执行 从sale.WatchList中删除,其中OfferId在(1,2

我正在运行执行原始sql以删除我为测试添加的一些记录。如果我在ManagementStudio中运行相同的查询,它可以正常工作,但当我运行该查询EFCore2.0时,它会抛出以下错误

System.Data.SqlClient.SqlException: 'Conversion failed when converting the nvarchar value '1,2' to data type int.'

代码

查询执行
从sale.WatchList中删除,其中OfferId在(1,2)中,UserId=9

有人能告诉我上面的代码有什么问题吗


感谢您,EF Core将把插入的字符串转换成带参数的查询,以创建可重用的查询并防止SQL注入漏洞。见:

所以

变成

   Delete from User where Id in (@ids) and RoleId = @RoleId
与SqlParameters绑定


如果这不是您想要的,只需在前一行上构建SQL查询。

EF Core会将插入的字符串转换为带参数的查询,以创建可重用的查询并防止SQL注入漏洞。见:

所以

变成

   Delete from User where Id in (@ids) and RoleId = @RoleId
与SqlParameters绑定


如果这不是您想要的,只需在前一行上构建SQL查询。

这将不起作用。您必须编写动态查询。请试试下面的一个

var idList = await _dataContext.User.ToListAsync();
            var ids = string.Join(",", idList.Select(x => x.Id));
            await _dataContext.Database.ExecuteSqlCommandAsync($"execute('Delete from User where Id in ({ids}) and RoleId = {contact.RoleId}')");

这是行不通的。您必须编写动态查询。请试试下面的一个

var idList = await _dataContext.User.ToListAsync();
            var ids = string.Join(",", idList.Select(x => x.Id));
            await _dataContext.Database.ExecuteSqlCommandAsync($"execute('Delete from User where Id in ({ids}) and RoleId = {contact.RoleId}')");

虽然接受的答案确实有效,但它会产生很多警告,所以现在我使用@Abu Zafor建议的小更改/修复


wait_dataContext.Database.ExecuteSqlCommandAsync($“execute({ids})和RoleId={contact.RoleId}'),Id,contact.RoleId)

虽然接受的答案确实有效,但它会产生很多警告,所以现在我使用@Abu Zafor建议的小改动/修复


wait_dataContext.Database.ExecuteSqlCommandAsync($“execute({ids})和RoleId={contact.RoleId}'),Id,contact.RoleId)

包含逗号的单个字符串与由逗号分隔的多个字符串(或多个整数)不同。在SQL和大多数其他语言中也是如此。包含逗号的单个字符串与由逗号分隔的多个字符串(或多个整数)不同。在SQL中,大多数其他语言也是如此。虽然这会创建警告,但会创建警告警告警告错误:必须声明标量变量“@p0”。抛出错误:必须声明标量变量“@p0”。