Tengo un diccionario de valores Ej. "Nombre": "Alex"
¿Hay alguna forma de pasar esto a Dapper como argumentos para una consulta?
Aquí hay un ejemplo que muestra lo que quiero hacer.
IDictionary<string, string> args = GetArgsFromSomewhere();
string query = "select * from people where Name = @Name";
var stuff = connection.Query<ExtractionRecord>(query, args);
new DynamicParameters(dictionary)
y funcionará bien.Sé que esta es una pregunta antigua (como 5 años) pero estaba luchando con lo mismo. La respuesta completa está en los comentarios a la otra respuesta, pero pensé que ofrecería un ejemplo completo aquí.
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));
O, para ser completamente dinámico, puede crear un método como este, que tomará cualquier modelo, cualquier consulta y cualquier conjunto de parámetros de consulta:
public static IEnumerable<T> Get<T>(string query, Dictionary<string, object> dictionary) { IEnumerable<T> entities = connection.Query<T>(query, new DynamicParameters(dictionary)); return entities; }
Y luego para llamar a este método:
var results = Get<MyTable>(query, dictionary)
EDITAR MUCHO DESPUÉS
Esta respuesta continúa recibiendo votos positivos, por lo que aparentemente sigue siendo una necesidad. Tomé esta solución y creé un paquete NuGet completo de acceso a datos construido sobre Dapper. Reduce sus operaciones CRUD y de consulta a una sola línea de código.
Aquí está el paquete NuGet .
fuente
También se puede usar an
ExpandoObject
como parámetros de una consulta, en lugar de la clase específica de DapperDynamicParameters
: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);
fuente