Параметр Dapper List отклонен Postgres

У меня есть List<Guid> (также пробовал с простым массивом), который я хотел бы использовать в запросе. Dapper генерирует SQL и правильно подставляет параметры для нумерованных параметров. Однако PG жалуется на синтаксис параметра списка. Никаких дополнительных подробностей не сообщается. Копируя сгенерированный SQL и заменяя числа фактическими значениями (добавляя скобки в параметр списка), запрос работает.

Вот оскорбительное предложение в сгенерированном SQL:

WHERE (
    names.tenant = $1
    AND scan_results.tenant = $1
    AND scan_results.scan IN $2
)

Исходная строка оператора для Dapper выглядит следующим образом:

WHERE (
    file_names.tenant = @tenantId
    AND scan_results.tenant = @tenantId
    AND scan_results.scan IN @validScans
)

Запрос выполняется с использованием con.Query следующим образом:

con.Query(stmt, new
{
    tenantId = tenant.Id,
    validScans = tenant.LatestScans // .ToArray()
});

Точная ошибка Postgres:

ERROR:  syntax error at or near "$2" at character ...

person mınxomaτ    schedule 25.09.2018    source источник


Ответы (1)


Оказывается, у меня были некоторые неправильные представления как о PGSQL, так и о Dapper. Во-первых, вокруг параметра нужны скобки, а во-вторых, мне нужно использовать ANY, а не IN.

Итак, правильный SQL выглядит так: AND scan_results.scan = ANY (@validScans)

person mınxomaτ    schedule 25.09.2018
comment
Спасибо! Я могу подтвердить, что это работает и для целых чисел, как и следовало ожидать. - person Nij; 23.07.2020