"在哪里x在y"带有dapper和postgresql抛出的子句42601:语法错误在\" $ 1 \"

时间:2015-10-18 03:24:41

标签: c# asp.net-mvc postgresql dapper npgsql

我有一个字符串数组,我想要一个包含IN子句的查询,例如:

"... WHERE t.name IN ('foo', 'bar', 'baz')..>"

这是我的查询的最后一位,其中包含"其中X在Y"子句:

...
left join genre_tag_band_join tj on hb.id = tj.band_id or ob.id = tj.band_id
left join genre_tags t on tj.genre_tag_id = t.id
inner join venues v on e.venue_id = v.id

where t.name IN @tagsParam...

我像这样打了一个Dapper电话

var shows = con.Query<Event, Band, Band, GenreTag, Venue, Event>(query, (e, hb, ob, gt, v) =>
{
    Event show;
    ...
    return e;
},
new { tagsParam = tagsArr}).AsQueryable();

其中tagsArr是一个字符串[]。

我得到例外:

  

{&#34; 42601:语法错误在\&#34; $ 1 \&#34;&#34;}

1 个答案:

答案 0 :(得分:19)

在PostgreSQL中,您不能使用IN来检查值是否在数组中,您必须使用以下PostgreSQL特定的语法:where t.name = ANY (@tagsParam)。请参阅PostgreSQL docs

中的第8.15.5节