Вставка списка во временную таблицу с помощью dapper

Я пытаюсь вставить список целых чисел во временную таблицу с помощью Dapper. Я написал свой запрос на основе выбранного ответа на это переполнение стека вопрос. Однако при выполнении запроса я получаю синтаксическую ошибку.

Код:

List<int> lst = new List<int> {1, 2, 3, 4};
string queryString="CREATE TABLE #Temp (ListInt int)" 
                + " INSERT INTO #Temp (ListInt) VALUES (@Lst);";
dbConnection.Open();

dbConnection.Query(queryString, new {Lst = lst});

Ошибка:

System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near ','.

Как я могу использовать Dapper для вставки этого списка?

Что такое lst в вашем коде? Предоставьте минимальный и полный пример

Jeroen Heier 10.08.2018 17:13

lst - это список <Int>

Drob337 10.08.2018 18:48
1
2
2 661
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это с помощью функции Dapper Выполнить команду несколько раз.

SQL-запрос должен содержать команду, которую вы хотите повторить, Только, а параметры (передаваемые в Dapper) должны быть IEnumerable объектов, где каждый объект имеет свойство, названное в честь используемого вами параметра. Наконец, используйте Execute (не Query), когда вы вставляете (не извлекаете) значения:

List<int> lst = new List<int> {1, 2, 3, 4};
dbConnection.Open();
dbConnection.Execute("CREATE TABLE #Temp (ListInt int)");
dbConnection.Execute("INSERT INTO #Temp (ListInt) VALUES (@item);",
    lst.Select(x => new { item = x }));

Обратите внимание, что если вы вставляете тысячи элементов, оператор INSERT будет выполняться один раз для каждого элемента, что может быть очень медленным. Если это так, изучите расширение сообщества для Dapper, такое как BulkInsert, которое может вставлять тысячи элементов в один оператор INSERT.

Другие вопросы по теме