У меня есть UDT в базе данных, созданный следующим образом:
Код: Выделить всё
CREATE TYPE ids_test AS (first int, second int);
У меня также есть соответствующий C# класс «test_ids» и сопоставьте его с этим UDT. Запрос довольно простой:
Код: Выделить всё
select *
from test
join (select * from unnest(@idpairs)) as pairs
on pairs.first = test.firstid and pairs.second = test.secondid
Код: Выделить всё
var dynamicParameters = new DynamicParameters();
dynamicParameters.Add("@idpairs", ids.Select(_ => new test_ids { first = _.f, second = _.s }).ToList());
var npgsqlConnection1 = new NpgsqlConnection(conStr);
npgsqlConnection1.Open();
npgsqlConnection1.TypeMapper.MapComposite("ids_test");
using (npgsqlConnection1)
{
var res = (await npgsqlConnection1.QueryAsync(query, dynamicParameters)).AsList();
}
execute: select *
from test
join (выберите * из unnest('{"(1,1)","(2,2)","(3,3)"}')) как пары
на пары.first = test.firstid и пары.секунда = test.секунда
параметры: $1 = '{"(1,1)","(2,2)","(3,3)"}'< /p>
Однако, когда я встраиваю параметр и пытаюсь выполнить запрос, я получаю ошибку «функция unnest(unknown) is not unique». Встроенный запрос:
Код: Выделить всё
select *
from test
join (select * from unnest('{"(1,1)","(2,2)","(3,3)"}')) as pairs
on pairs.first = test.firstid and pairs.second = test.secondid
Более того, даже если я добавлю явное приведение, результат unnest не будет содержать имена столбцов. Вопрос в том, что делает приложение, чтобы этот запрос работал корректно?
Подробнее здесь: https://stackoverflow.com/questions/787 ... executed-f