C# Postgres中带有IEnumerable参数的IN查询的Dapper AddDynamicParams

C# Postgres中带有IEnumerable参数的IN查询的Dapper AddDynamicParams,c#,dapper,postgresql-9.3,C#,Dapper,Postgresql 9.3,首先,我遇到了与两年前讨论过的问题相同的问题,据说已经解决了。有关该问题,请参见以下问题: 我遇到的问题是,当我对我的Postgres 9.3数据库执行类似的查询(SELECT*FROM MyTable WHERE MyId IN@myIds)时,我得到以下异常: Npgsql.NpgsqlException : ERROR: 42883: operator does not exist: integer = integer[] 我执行此查询的代码如下所示: List<MyTable&

首先,我遇到了与两年前讨论过的问题相同的问题,据说已经解决了。有关该问题,请参见以下问题:

我遇到的问题是,当我对我的Postgres 9.3数据库执行类似的查询(
SELECT*FROM MyTable WHERE MyId IN@myIds
)时,我得到以下异常:

Npgsql.NpgsqlException : ERROR: 42883: operator does not exist: integer = integer[]
我执行此查询的代码如下所示:

List<MyTable> result;

var query = "SELECT * FROM MyTable WHERE MyId IN @myIds";
var queryParams = new Dictionary<string, object> {
    { "myIds", new [] { 5, 6 } }
};

var dynamicParams = new DynamicParameters(queryParams);
using (var connection = new NpgsqlConnection(connectionString)) {
    result = connection.Query<MyTable>(query, dynamicParams).ToList();
}

return result;
列表结果;
var query=“从@myIds中MyId所在的MyTable中选择*”;
var queryParams=新字典{
{“myIds”,新[]{5,6}
};
var dynamicParams=新的DynamicParameters(queryParams);
使用(var连接=新的NpgsqlConnection(connectionString)){
结果=connection.Query(Query,dynamicParams.ToList();
}
返回结果;
相反,如果我在Dapper(v1.29)的SqlMapper.PackListParameters函数的
If(FeatureSupport.Get(command.Connection.Arrays)
行上放置一个断点,并手动将执行移到else部分,那么查询将运行并返回预期结果


我注意到
.Arrays
属性显式地将Postgres作为受支持的数据库调用,因此我想知道:这是我的代码、简洁的代码、简洁的配置还是Postgres配置的问题?是否有一种无需修改简洁代码库的变通方法?谢谢。

是的,这看起来像是一个与postgres中数组类型处理相关的bug;这是专为博士后写的,因此与你提到的“据称是固定的”帖子无关。老实说,我对postgres数组知之甚少——这些代码来自用户贡献的IIRC。我很想知道,如果你使用本地postgres语法,它是否有效

WHERE MyId = ANY(@myIds)
但是,我同意,如果我们可以在任何一种RDBMS上使用相同的语法,那就太好了


但实际上,它在代码中标记了另一个需要修复的bug(在
功能支持
查找中)。

其中MyId=ANY(@MyId)
起作用。使用
FeatureSupport{Arrays=false}
重新编译还允许@myIds中的常规
WHERE-MyId工作。(这是问题#150:)是否限制为1000行?它对我不起作用:Npgsql.postgresceception(0x80004005):22P03:无效数组标志;有什么想法吗?