使用 Postgres 的 Dapper WHERE IN 字符串语句

Posted

技术标签:

【中文标题】使用 Postgres 的 Dapper WHERE IN 字符串语句【英文标题】:Dapper WHERE IN string statement with Postgres 【发布时间】:2017-04-24 00:11:44 【问题描述】:

我见过Dapper WHERE IN statement with ODBC

但我不确定 Dapper 是否支持 Postgres 的 WHERE IN ("String1", "String2") 语法。这支持吗?我试图挖掘代码,但我现在真的没有时间。到目前为止,我只看到了整数的例子。

例子:

_connection.QueryAsync<Lookup>("select * from lookup where lower(discriminator) in @types", new  types = new[] "Prefix", "Suffix" );

结果: PostgresException "42601: \"$1\"" 处或附近的语法错误

声明:

select * from lookup where lower(discriminator) in $1

【问题讨论】:

不确定 Postgres,但在 TSql 中,您必须将括号括在参数周围,例如 in (@types),因为 dapper 只是将它替换为它生成并设置为值的参数名称的逗号分隔列表在你传递给它的集合中。 【参考方案1】:

如果我没记错的话,Postgres 中的 IN 运算符将不支持将数组作为参数。而不是IN 尝试ANY 运算符,如下所示:

var query = "SELECT * FROM lookup WHERE LOWER(discriminator) = ANY(@types)";

_connection.QueryAsync<Lookup>(query, new  types = new[] "Prefix", "Suffix" );

【讨论】:

先生,您是圣人。我的 .NET / SQL Server 背景正在显示。这行得通,谢谢! 谢谢你,我一直在与查询作斗争,试图弄清楚为什么有效的 sql 不起作用。 另请参阅***.com/questions/11730777/postgres-not-in-array 以获取“NOT IN”等价物。

以上是关于使用 Postgres 的 Dapper WHERE IN 字符串语句的主要内容,如果未能解决你的问题,请参考以下文章

带参数的 Dapper Postgres 存储过程

分享一个dapper简单封装

Dapper

Dapper入门使用,代替你的DbSQLhelper

Dapper的新实践,Dapper.Contrib的使用与扩展

Dapper入门使用,代替你的DbSQLhelper