如何将列表,字符串和整数添加到dapper选择查询中

时间:2020-06-16 12:19:52

标签: .net .net-core orm dapper

在方法的输入处,我有一个模型,由 { “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选择查询中

2 个答案:

答案 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会将其独立放下)

相关问题