как добавить список, строку и int в запрос выбора dapper - PullRequest
0 голосов
/ 16 июня 2020

На входе метода у меня есть модель, состоящая из {"Id": ["string"], "Status": "string", "systemStatus": "string"} Проверял запрос в ssms и он работает, но при отладке этого метода я вижу другой результат. dapper берет первый идентификатор и возвращает 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 голосов
/ 17 июня 2020

если у вас есть список в sql, вам нужно написать только «SELECT * FROM TableA WHERE id IN @ ids » без скобок, и dapper поместит их независимо

0 голосов
/ 16 июня 2020

Dapper интерпретирует sql "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 }});
...