20

我想创建这个查询:

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);

但它没有用;)

4

5 回答 5

37

将其作为数组传递:

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);
于 2011-04-18T10:29:31.833 回答
1

您需要动态创建命令字符串 - 循环使用第一个参数为 :num0,第二个参数为 :num1 等。添加所有这些后,删除最后一个字符“,”并将其替换为“)”。

于 2011-04-18T10:29:50.177 回答
0

除了@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);
于 2015-06-23T16:33:13.403 回答
0

使用“从测试中删除 id IN (select unnest(@ids))”

于 2020-03-04T10:30:07.067 回答
0

2021 年的更新答案:

你可以ANY这样使用:

WHERE id = ANY (@ids)

然后,当您添加参数时,请执行以下操作:

cmd.Parameters.AddWithValue("ids", ids.ToArray());
于 2021-10-25T20:07:05.663 回答