被 Postgres 拒绝的 Dapper 列表参数

mın*_*maτ 2 c# postgresql dapper postgresql-11

我有一个List<Guid>(也用普通数组尝试过),我想在查询中使用它。Dapper 生成 SQL 并正确替换编号参数的参数。但是,PG 抱怨 list 参数的语法。没有提供进一步的细节。复制生成的 SQL 并用实际值替换数字(将括号添加到列表参数),查询有效。

这是生成的 SQL 中的违规子句:

WHERE (
    names.tenant = $1
    AND scan_results.tenant = $1
    AND scan_results.scan IN $2
)
Run Code Online (Sandbox Code Playgroud)

Dapper 的原始语句字符串是这样的:

WHERE (
    file_names.tenant = @tenantId
    AND scan_results.tenant = @tenantId
    AND scan_results.scan IN @validScans
)
Run Code Online (Sandbox Code Playgroud)

查询是这样执行的con.Query

con.Query(stmt, new
{
    tenantId = tenant.Id,
    validScans = tenant.LatestScans // .ToArray()
});
Run Code Online (Sandbox Code Playgroud)

确切的 Postgres 错误是:

ERROR:  syntax error at or near "$2" at character ...
Run Code Online (Sandbox Code Playgroud)

mın*_*maτ 6

原来我对 PGSQL 和 Dapper 都有一些误解。首先,参数周围需要括号,其次,我需要使用ANY,而不是IN.

所以正确的 SQL 如下所示: AND scan_results.scan = ANY (@validScans)