我有int列表,我需要转换它,以便可以从c#代码发送到IN运算符。我尝试了很多操作,但每次都有错误。
string idsList = "(" + string.Join(",", ids.Select(id => $"'{id.ToString()}'")) +")";
var sql = @"SELECT * from user
WHERE user.id IN (@idsList))";
using (var connection = OpenConnection())
{
var results = await connection.QueryAsync<UserQueryResponse>(sql, new
{
idsList= idsList,
});
return results.Select(raw =>raw.CreateModel());
}
}
user.id的列类型是字符串
我假设你正在使用Dapper。看看这个answer。尝试删除查询中的括号。
var sql = @"SELECT * from user WHERE user.id IN @idsList";
using (var connection = OpenConnection())
{
var results = await connection.QueryAsync<UserQueryResponse>(sql, new
{
idsList= idsList,
});
return results.Select(raw =>raw.CreateModel());
}
}
如果您的查询未参数化,则不应使用参数分隔符(qazxsw poi)。
警告:请注意,如果@
列表不是ids
类型,则可能存在SQL注入问题。
int
更好的方法是使用参数:
List<int> ids = new List<int>{ 7, 14 ,21 };
string idsList = "(" + string.Join(",", ids.Select(id => $"'{id.ToString()}'")) +")";
/* Your idsList variable will contain "('7','14','21')" */
var sql = @"SELECT * from user WHERE user.id IN " + idsList;