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、2 番目のパラメーターを :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

〜2021年の回答を更新:

ANY次のように使用できます。

WHERE id = ANY (@ids)

次に、パラメーターを追加するときは、次のようにします。

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

「id INのテストから削除(unnest(@ids)を選択)」を使用

于 2020-03-04T10:30:07.067 に答える