如何将列表、字符串和整数添加到 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 会独立地把它们写下来