如何将列表、字符串和整数添加到 dapper select 查询中
how add list, string and int into dapper select query
在方法的输入端,我有一个模型,它包含
{
"Id": [
"string"
],
"Status": "string",
"systemStatus": "string"
}
我检查了 ssms 中的请求并且它有效,但是在调试这个方法时我看到了不同的结果。
dapper取第一个id和return1个用户,但在sql工作室returns 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) 但结果相同(如何正确地将列表、字符串和整数添加到 dapper select 查询
Dapper 以不同的方式诠释 sql "in"。查看下面的 in sql 运算符的转换,并尝试相应地适应您的更改:
Sql 查询:
SELECT * FROM TableA WHERE id IN (commaSeparatedlistOfIDs)
上述查询的简洁转换:
string sql = "SELECT * FROM TableA WHERE id IN @ids"
var results = conn.Query(sql, new { ids = new[] { 1, 2, 3, 4, 5 }});
如果你在 sql 中有列表,你只需要写 "SELECT * FROM TableA WHERE id IN @ids" 没有括号,dapper 会独立地把它们写下来
在方法的输入端,我有一个模型,它包含 { "Id": [ "string" ], "Status": "string", "systemStatus": "string" } 我检查了 ssms 中的请求并且它有效,但是在调试这个方法时我看到了不同的结果。 dapper取第一个id和return1个用户,但在sql工作室returns 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) 但结果相同(如何正确地将列表、字符串和整数添加到 dapper select 查询
Dapper 以不同的方式诠释 sql "in"。查看下面的 in sql 运算符的转换,并尝试相应地适应您的更改:
Sql 查询:
SELECT * FROM TableA WHERE id IN (commaSeparatedlistOfIDs)
上述查询的简洁转换:
string sql = "SELECT * FROM TableA WHERE id IN @ids"
var results = conn.Query(sql, new { ids = new[] { 1, 2, 3, 4, 5 }});
如果你在 sql 中有列表,你只需要写 "SELECT * FROM TableA WHERE id IN @ids" 没有括号,dapper 会独立地把它们写下来