Search code examples
c#postgresqlado.netnpgsql

How to pass parameter to sql 'in' statement?


I want to create this query:

select * from products where number in ('123', '234', '456');

but I can't find any example of achiving this with Npgsql and NpgsqlParameter. I tried like this:

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

but it didn't work ;)


Solution

  • Pass it as an array:

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