C# Postgres中带有IEnumerable参数的IN查询的Dapper AddDynamicParams
首先,我遇到了与两年前讨论过的问题相同的问题,据说已经解决了。有关该问题,请参见以下问题: 我遇到的问题是,当我对我的Postgres 9.3数据库执行类似的查询(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&
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:无效数组标志;有什么想法吗?