ExecuteInterpolatedSql с оператором WHERE IN Int[]C#

Место общения программистов C#
Ответить
Anonymous
 ExecuteInterpolatedSql с оператором WHERE IN Int[]

Сообщение Anonymous »

Я пытаюсь выполнить запрос с помощью ExecuteInterpolatedSqlAsync, который проверяет, включена ли определенная подстрока в массив целых чисел.
Я пробовал следующее:

Код: Выделить всё

var value = "example";
var integers = new List { 100, 404, 777 };
FormattableString query =
$"DELETE FROM Table1
WHERE Type = {value}
AND CAST(SUBSTRING(Value, 5, 7) AS INTEGER) IN ({string.Join(",", integers)})";

await _signInDbContext.ExecuteSqlInterpolatedAsync(query);
Когда я отлаживаю это, строка отображается следующим образом:

Код: Выделить всё

DELETE FROM Table1 WHERE Type = example AND CAST(SUBSTRING(Value, 5, 7) AS INTEGER) IN (100,404,700)
Но когда он выполняет запрос к базе данных, оба параметра заключаются в кавычки:

Код: Выделить всё

DELETE FROM Table1 WHERE Type = 'example' AND CAST(SUBSTRING(Value, 5, 7) AS INTEGER) IN ('100,404,700')
Это имеет смысл, поскольку оба являются строками. Но это не то, что я хочу (очевидно), я получаю эту ошибку:

Ошибка преобразования при преобразовании значения nvarchar '100,404,777' в тип данных int

Как включить целочисленный массив в этот запрос ExecuteSqlInterpolatedAsync?

Подробнее здесь: https://stackoverflow.com/questions/731 ... -statement
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»