Ich habe ein Wertewörterbuch, zB "Name": "Alex"
Gibt es eine Möglichkeit, dies als Argumente für eine Abfrage an Dapper zu übergeben?
Hier ist ein Beispiel, das zeigt, was ich tun möchte.
IDictionary<string, string> args = GetArgsFromSomewhere();
string query = "select * from people where Name = @Name";
var stuff = connection.Query<ExtractionRecord>(query, args);
new DynamicParameters(dictionary)
und es gut funktioniert.Ich weiß, dass dies eine alte Frage ist (etwa 5 Jahre alt), aber ich hatte mit der gleichen Sache zu kämpfen. Die vollständige Antwort finden Sie in den Kommentaren zur 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 akzeptiert:
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, um diese Methode aufzurufen:
var results = Get<MyTable>(query, dictionary)
LANG NACH BEARBEITEN
Diese Antwort erhält weiterhin positive Stimmen, daher ist dies anscheinend immer noch ein Bedürfnis. Ich habe diese Lösung genommen und ein komplettes NuGet-Paket für den Datenzugriff erstellt, das auf Dapper basiert. Es reduziert Ihre CRUD- und Abfrageoperationen auf eine einzige Codezeile.
Hier ist das NuGet-Paket .
quelle
ExpandoObject
Anstelle der Dapper-spezifischen Klasse kann auch a als Parameter einer Abfrage verwendet werdenDynamicParameters
:ExpandoObject param = new ExpandoObject(); IDictionary<string, object> paramAsDict = param as IDictionary<string, object>; paramAsDict.Add("foo", 42); paramAsDict.Add("bar", "test"); MyRecord stuff = connection.Query<MyRecord>(query, param);
quelle