2

我有一个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 ...
4

1 回答 1

7

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

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

于 2018-09-25T13:15:25.233 回答