加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用Postgres中的IEnumerable参数进行IN查询的Dapper AddD

发布时间:2020-12-15 04:25:08 所属栏目:百科 来源:网络整理
导读:首先,我遇到了所讨论的同样的问题,据称大约在两年前修复了.有关该问题,请参阅以下问题: Dapper AddDynamicParams for IN statement with “dynamic” parameter name 我遇到的问题是,当我对Postgres 9.3数据库执行类似的查询(SELECT * FROM MyTable WHERE M
首先,我遇到了所讨论的同样的问题,据称大约在两年前修复了.有关该问题,请参阅以下问题:

Dapper AddDynamicParams for IN statement with “dynamic” parameter name

我遇到的问题是,当我对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;

如果相反,我在Dapper的(v1.29)SqlMapper.PackListParameters函数中放置一个断点if(FeatureSupport.Get(command.Connection).Arrays)并手动将执行移动到else部分,然后查询运行并返回预期成绩.

我注意到.Arrays属性显式地将Postgres称为受支持的数据库,所以我想知道:这是我的代码,Dapper代码,Dapper配置还是Postgres配置的问题?是否可以在不修改Dapper代码库的情况下使用变通方法?谢谢.

解决方法

是的,这看起来像是与postgres中数组类型处理相关的错误;这是postgres特有的,所以与你提到的“涉嫌修复”的帖子无关.我会诚实地对你说:我对postgres数组知之甚少 – 该代码来自用户贡献,IIRC.如果您使用本机postgres语法,我会非常有兴趣知道它是否有效,即
WHERE MyId = ANY(@myIds)

但是,我同意如果我们可以在RDBMS上使相同的语法工作,那将是很好的.

实际上,它已经标记了需要修复的代码中的另一个错误(在FeatureSupport查找中).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读