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

.net dapper sql

Question

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

SELECT * 
  FROM SomeTable 
 WHERE id IN (commaSeparatedListOfIDs)

Le commaSeparatedListOfIDs est transmis à partir de la logique métier et peut être n'importe quel type de IEnumerable(of Integer) . Comment pourrais-je construire une requête dans ce cas? Dois-je faire ce que j'ai fait jusqu'à présent, qui est essentiellement la concaténation de chaînes ou existe-t-il une technique de mappage de paramètres avancée que je ne connais pas?

Réponse acceptée

Dapper le supporte 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 }});

Réponse populaire

Directement depuis la page d'accueil du projet GitHub :

Dapper vous permet de passer IEnumerable et de paramétrer 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



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