"WHERE x IN y" clause avec dapper et postgresql jetant 42601: erreur de syntaxe à ou près de \ "$ 1 \"

asp.net-mvc c# dapper npgsql postgresql

Question

J'ai un tableau de chaînes et j'aimerais avoir une requête contenant une clause IN, comme:

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

Voici le dernier bit de ma requête, qui contient une clause "where X in 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...

Je fais un appel Dapper comme ça

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

où tagsArr est une chaîne [].

Je reçois une exception:

{"42601: erreur de syntaxe à ou près de \" $ 1 \ ""}

Réponse acceptée

Dans PostgreSQL, vous ne pouvez pas utiliser IN pour vérifier si une valeur est dans un tableau, vous devez utiliser la syntaxe spécifique à PostgreSQL suivante: where t.name = ANY (@tagsParam) . Voir la section 8.15.5 dans les documents PostgreSQL .




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi