private List <Dictionary <string, object> > Query(string name, CommandType commandType, Dictionary <string, object> parameters) { List <Dictionary <string, object> > results = new List <Dictionary <string, object> >(); using (IDbConnection connection = _provider.CreateConnection()) { connection.Open(); using (var reader = _provider.ExecuteQuery(connection, name, commandType, parameters)) { while (reader.Read()) { Dictionary <string, object> result = new Dictionary <string, object>(); var columns = Enumerable.Range(0, reader.FieldCount).Select(reader.GetName).ToList(); foreach (var column in columns) { object columnValue = reader[column]; if (columnValue == DBNull.Value) { result.Add(column, null); } else { result.Add(column, columnValue); } } results.Add(result); } } } return(results); }