Comment créer des arguments pour une requête Dapper de manière dynamique

.net c# dapper

Question

J'ai un dictionnaire de valeurs Par exemple "Nom": "Alex"

Y a-t-il un moyen de le transmettre à Dapper en tant qu'arguments pour une requête?

Voici un exemple montrant ce que je veux faire.

IDictionary<string, string> args = GetArgsFromSomewhere();
string query = "select * from people where Name = @Name";
var stuff = connection.Query<ExtractionRecord>(query, args);

Réponse acceptée

Oui:

var dbArgs = new DynamicParameters();
foreach(var pair in args) dbArgs.Add(pair.Key, pair.Value);

Ensuite, passez dbArgs à la place des args :

var stuff = connection.Query<ExtractionRecord>(query, dbArgs);

Vous pouvez également écrire votre propre classe qui implémente IDynamicParameters .

Notez que si vous commencez à partir d'un objet (l'approche habituelle avec dapper), vous pouvez également utiliser ce modèle avec DynamicParameters comme point de départ:

var dbArgs = new DynamicParameters(templateObject);

Réponse populaire

Je sais que c'est une vieille question (comme 5 ans) mais je me débattais avec la même chose. La réponse complète est dans les commentaires à l'autre réponse, mais j'ai pensé que je proposerais un exemple complet ici.

string query = "SELECT * FROM MyTableName WHERE Foo = @Foo AND Bar = @Bar";

Dictionary<string, object> dictionary = new Dictionary<string, object>();
dictionary.Add("@Foo", "foo");
dictionary.Add("@Bar", "bar");

var results = connection.Query<MyTableName>(query, new DynamicParameters(dictionary));

Ou, pour être totalement dynamique, vous pouvez créer une méthode comme celle-ci, qui prendra n'importe quel modèle, n'importe quelle requête et tout ensemble de paramètres de requête:

    public static IEnumerable<T> Get<T>(string query, Dictionary<string, object> dictionary)
    {
        IEnumerable<T> entities = connection.Query<T>(query, new DynamicParameters(dictionary));
        return entities;
    }

Et puis appeler cette méthode:

var results = Get<MyTable>(query, dictionary)



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