Ich habe ein Wörterbuch von Werten zB "Name": "Alex"
Gibt es eine Möglichkeit, Dapper als Argumente für eine Abfrage zu übergeben?
Hier ist ein Beispiel, das zeigt, was ich machen möchte.
IDictionary<string, string> args = GetArgsFromSomewhere();
string query = "select * from people where Name = @Name";
var stuff = connection.Query<ExtractionRecord>(query, args);
Ja:
var dbArgs = new DynamicParameters();
foreach(var pair in args) dbArgs.Add(pair.Key, pair.Value);
dbArgs
dann dbArgs
anstelle von args
:
var stuff = connection.Query<ExtractionRecord>(query, dbArgs);
Alternativ können Sie eine eigene Klasse schreiben, die IDynamicParameters
implementiert.
Beachten Sie, dass Sie diese Vorlage mit DynamicParameters
als Ausgangspunkt verwenden können, wenn Sie von einem Objekt aus starten (der übliche Ansatz mit Dapper):
var dbArgs = new DynamicParameters(templateObject);
Ich weiß, das ist eine alte Frage (wie, 5 Jahre alt), aber ich habe mit der gleichen Sache gekämpft. Die vollständige Antwort ist in den Kommentaren zu der anderen Antwort, aber ich dachte, ich würde hier ein vollständiges Beispiel anbieten.
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));
Um vollständig dynamisch zu sein, können Sie eine Methode wie diese erstellen, die jedes Modell, jede Abfrage und jeden Satz von Abfrageparametern verwendet:
public static IEnumerable<T> Get<T>(string query, Dictionary<string, object> dictionary)
{
IEnumerable<T> entities = connection.Query<T>(query, new DynamicParameters(dictionary));
return entities;
}
Und dann diese Methode zu nennen:
var results = Get<MyTable>(query, dictionary)