C# 将IN谓词与字符串数组一起使用时,PostgreSQL缺少运算符

C# 将IN谓词与字符串数组一起使用时,PostgreSQL缺少运算符,c#,postgresql,dapper,npgsql,C#,Postgresql,Dapper,Npgsql,鉴于此表结构: CREATE TABLE tags ( id SERIAL NOT NULL PRIMARY KEY, tagname TEXT NOT NULL UNIQUE, authorid int NOT NULL, created timestamp NOT NULL, lastmodified timestamp NOT NULL, constraint fk_authorid_tags foreign key(authorid) references us

鉴于此表结构:

CREATE TABLE tags
(
  id SERIAL NOT NULL PRIMARY KEY,
  tagname TEXT NOT NULL UNIQUE,
  authorid int NOT NULL,
  created timestamp NOT NULL,
  lastmodified timestamp NOT NULL,

  constraint fk_authorid_tags foreign key(authorid) references users(id)
);
为什么以下查询失败并出现错误:

ERROR:  operator does not exist: text = text[]
LINE 2: select * from tags where tagname in ('{"c#","c"}'::text[])
查询:

select * from tags where tagname in ('{"c#","c"}'::text[])

中的
必须包含文字列表,例如

tagname IN ('c#', 'c')
如果需要数组,则必须使用
=ANY

tagname = ANY (ARRAY['c#', 'c'])
出现此错误的原因是,(somearray)
中的
标记名被解释为查询“is
标记名
等于单元素列表
(somearray)
”中的任何元素。这意味着测试标记名是否与唯一元素somearray相等。由于没有
=
运算符来比较
文本
文本[]
,因此此操作失败


相反,
=ANY
表示“对于右侧数组的任何元素,左侧操作数是否等于该元素?”。所以它是有效的。

谢谢克雷格的透彻解释。