如何在dapper选择查询中添加list、string和int等内容。

问题描述 投票:0回答:1

在方法的输入端,我有一个模型,它由{ "Id": [ "string" ], "Status": "string", "systemStatus": "string"}我在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),但结果是一样的。

.net .net-core orm dapper
1个回答
0
投票

Dapper以不同的方式解释sql的 "in"。有一个看下面的转换为in 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 }});

0
投票

如果你有sql中的列表,你只需要写 "SELECT * FROM TableA WHERE id IN"。@ids"没有括号,dapper会把它们独立地放下来。

© www.soinside.com 2019 - 2024. All rights reserved.