350 votes

SELECT * FROM X WHERE id IN (...) avec Dapper ORM

Quelle est la meilleure façon d'écrire une requête avec la clause à l'aide de Dapper ORM lorsque la liste des valeurs de la clause est à venir à partir de la logique d'affaires? Par exemple, disons que j'ai une requête:

SELECT * 
  FROM SomeTable 
 WHERE id IN (commaSeparatedListOfIDs)

L' commaSeparatedListOfIDs est transmis à partir de la logique d'entreprise et il peut être n'importe quel type d' IEnumerable(of Integer). Comment construire une requête dans ce cas? Dois-je faire ce que j'ai fait jusqu'à présent qui est en fait la concaténation de chaîne ou est-il une sorte d'avancée paramètre technique de cartographie que je ne suis pas au courant?

545voto

LukeH Points 110965

Dapper ne supporte-t-il pas cela directement? Par exemple...

 string sql = "SELECT * FROM SomeTable WHERE id IN @ids"
var results = conn.Query(sql, new { ids = new[] { 1, 2, 3, 4, 5 });
 

(Non testé donc je peux me tromper.)

82voto

Factor Mystic Points 12465

Directement à partir de la page d'accueil du projet Google Code :

Dapper vous permet de passer en IEnumerable et paramètrera automatiquement votre requête.

 connection.Query<int>("select * from (select 1 as Id union all select 2 union all select 3) as X where Id in @Ids", new { Ids = new int[] { 1, 2, 3 });
 

Sera traduit à:

 select * from (select 1 as Id union all select 2 union all select 3) as X where Id in (@Ids1, @Ids2, @Ids3)" // @Ids1 = 1 , @Ids2 = 2 , @Ids2 = 3
 

1voto

MatBailie Points 37610

D'après mon expérience, la façon la plus conviviale de gérer cela consiste à avoir une fonction qui convertit une chaîne en une table de valeurs.

Il existe de nombreuses fonctions de division disponibles sur le Web. Vous en trouverez facilement une, quelle que soit votre version de SQL.

Vous pouvez alors faire ...

 SELECT * FROM table WHERE id IN (SELECT id FROM split(@list_of_ids))
 

Ou

 SELECT * FROM table INNER JOIN (SELECT id FROM split(@list_of_ids)) AS list ON list.id = table.id
 

(Ou similaire)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X