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?
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 }});
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