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)
原来我对 PGSQL 和 Dapper 都有一些误解。首先,参数周围需要括号,其次,我需要使用ANY,而不是IN.
所以正确的 SQL 如下所示: AND scan_results.scan = ANY (@validScans)
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |