在方法的输入处,我有一个模型,由 { “ID”: [ “串” ], “ Status”:“ string”, “ systemStatus”:“字符串” } 我在ssms中检查了请求,它可以工作,但是在调试此方法时,我看到了不同的结果。 dapper使用第一个ID并返回1个用户,但是在sql studio中返回6个用户
public async Task<IEnumerable<User>> FindUser(Users model)
{
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@Id", model.Id);
parameters.Add("@Status", model.Status);
parameters.Add("@systemStatus", model.SystemStatus);
IEnumerable<User> items = null;
var sql = @"SELECT statusesid FROM userstatuses WHERE [id] IN (@Id)
AND [status] in (@Status) and [systemStatus] in (@systemStatus)";
try
{
using (var db = new SqlConnection(connectionString))
{
if (db.State != ConnectionState.Open)
await db.OpenAsync();
items = await db.QueryAsync<User>(sql, parameters);
}
}
catch (Exception e)
{
_logger.Error(e);
}
return items;
}
我尝试使用string.Join(“,”,model.Id)但结果相同(如何将列表,字符串和int正确添加到dapper选择查询中
答案 0 :(得分:0)
Dapper用不同的方式“解释” sql。看看下面在sql运算符中的转换,并尝试相应地容纳您的更改:
Sql查询:
SELECT * FROM TableA WHERE id IN (commaSeparatedlistOfIDs)
上述查询的Dapper转换:
string sql = "SELECT * FROM TableA WHERE id IN @ids"
var results = conn.Query(sql, new { ids = new[] { 1, 2, 3, 4, 5 }});
答案 1 :(得分:0)
如果您在sql中有列表,则只需要写“ SELECT * FROM TableA WHERE ID IN @ids ”(不带方括号,dapper会将其独立放下)