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 .
new DynamicParameters(dictionary)
y funcionará bien.