You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dapper中使用PostgreSQL数组重叠运算符&&?

解决方案:Dapper + PostgreSQL 数组&&操作符报错问题

问题原因

你遇到的错误是因为Dapper传递string[]参数时,Npgsql默认未正确将其映射为PostgreSQL的text[]类型,导致参数被识别为record或record[],与name字段的text[]类型不兼容,触发了操作符不存在的错误。

可行解决方案

方案1:SQL中显式转换参数类型

直接在SQL里将@name参数转换为text[]类型,无需修改C#代码的参数传递逻辑:

SELECT name FROM people
WHERE @name::text[] && name

方案2:指定参数的数据库类型

在C#代码中传递参数时,明确指定参数类型为text[],让Npgsql正确识别:

var parameters = new DynamicParameters();
// 方式1:使用通用DbType
parameters.Add("name", new[] { "John", "Sue" }, DbType.StringArray);
// 方式2:使用Npgsql专属类型(更推荐)
parameters.Add("name", new[] { "John", "Sue" }, NpgsqlDbType.TextArray);

// 执行查询
var result = await connection.QueryAsync<string>("SELECT name FROM people WHERE @name && name", parameters);

注意事项

  • 不要用ARRAY[@name]包裹参数,这会把原本的一维数组变成二维的record[]类型,完全不符合预期。
  • 确保people表中的name字段类型是text[];如果name是单个text类型,原SQL的&&操作本身逻辑不合理,应改用name = ANY(@name)实现匹配。

内容的提问来源于stack exchange,提问作者Daniel Matthews

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:30:08