Как передать параметр в sql 'in'?
Я хочу создать этот запрос:
select * from products where number in ('123', '234', '456');
но я не могу найти ни одного примера достижения этого с помощью Npgsql и NpgsqlParameter. Я пробовал вот так:
string[] numbers = new string[] { "123", "234" };
NpgsqlCommands cmd = new NpgsqlCommands("select * from products where number in (:numbers)");
NpgsqlParameter p = new NpgsqlParameter("numbers", numbers);
command.Parameters.Add(p);
но это не сработало;)
Ответы
Ответ 1
Передайте его как массив:
string[] numbers = new string[] { "123", "234" };
NpgsqlCommands cmd = new NpgsqlCommands("select * from products where number = ANY(:numbers)");
NpgsqlParameter p = new NpgsqlParameter("numbers", NpgsqlDbType.Array | NpgsqlDbType.Text);
p.value = numbers;
command.Parameters.Add(p);
Ответ 2
Вам необходимо динамически создать строку с вашей первой строкой: num0, second as: num1 и т.д. Когда вы добавили все из них, удалите последний символ "," и замените его на ")",.
Ответ 3
В дополнение к ответу @Quassnoi я добавлю это, чтобы показать, как мы это сделали в реальном коде.
Внимание! Этот рабочий код выполнен из реального проекта и может повредить вашим красивым подходам!
string commstr = "SELECT product_name, price, product_url, image_url FROM products WHERE id = ANY(@arr);";
NpgsqlCommand cm = new NpgsqlCommand(commstr, cn);
NpgsqlParameter arpar = new NpgsqlParameter();
arpar.ParameterName = "arr";
arpar.NpgsqlDbType = NpgsqlDbType.Array | NpgsqlDbType.Bigint;
arpar.Value = PerformQuerySphinx(query, limit);
cm.Parameters.Add(arpar);