【问题标题】:Dapper List Parameter rejected by PostgresPostgres 拒绝了 Dapper 列表参数
【发布时间】:2018-09-25 13:03:57
【问题描述】:

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

【问题讨论】:

    标签: c# postgresql dapper postgresql-11


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!正如您所料,我可以确认这也适用于整数。
    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2012-10-28
    相关资源
    最近更新 更多