Dapper AddDynamicParams for IN avec le nom de paramètre "dynamic"

c# c#-4.0 dapper

Question

J'ai une chaîne SQL simple comme celle-ci:

"SELECT * FROM Office WHERE OfficeId IN @Ids"

La chose est que le nom de @Ids est entré dans un éditeur, donc ça pourrait être n'importe quoi, et mon problème est que si je veux passer, disons un tableau de nombres entiers, cela fonctionne seulement avec Dapper si j'utilise:

var values = new DynamicParameters();
values.AddDynamicParams(new { Ids = new[] { 100, 101 } });

Mais cela nécessite que je sache que le nom du paramètre est Ids et ce n'est pas le cas dans mon scénario.

Je peux définir un "paramètre dynamique" dans Dapper avec un nom "dynamique" comme ceci:

var values = new DynamicParameters();
values.Add("Ids", new[] { 100, 101 });

Mais alors Dapper ne construit pas le SQL IN (....) avec des paramètres séparés pour chaque valeur.

Existe-t-il un moyen de construire l'objet dynamique transmis à AddDynamicParams mais en définissant le nom et la valeur du membre sans connaître le nom au préalable?

Je pourrais modifier la source Dapper pour travailler pour mon scénario, mais si quelqu'un connaissait une solution plus simple et élégante, je serais reconnaissant!

Réponse acceptée

Je viens de soumettre un correctif au référentiel qui permet à l'un des éléments suivants de fonctionner correctement:

par objet (cela a fonctionné précédemment):

values.AddDynamicParams(new { ids = list });

ou, par nom unique:

values.Add("ids", list);

ou, en tant que dictionnaire:

var args = new Dictionary<string, object>();
args.Add("ids", list);
values.AddDynamicParams(args);

Je n'ai pas encore déployé sur NuGet. Faites-moi savoir si c'est un problème.




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