Dapper列表参数被Postgres拒绝

时间:2018-09-25 13:03:57

标签: 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
)

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 :(得分:0)

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

所以正确的SQL看起来像这样:AND scan_results.scan = ANY (@validScans)