Dapper List Параметр отклонен Postgres - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть List<Guid> (также пробовал с простым массивом), который я хотел бы использовать в запросе.Dapper генерирует SQL и правильно подставляет параметры для пронумерованных параметров.Однако PG жалуется на синтаксис в параметре list.Никаких дополнительных подробностей не приводится.Скопировав сгенерированный 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 ...

1 Ответ

0 голосов
/ 25 сентября 2018

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

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

...