public async Task <PaginacionModel> DevolverPaginacion(string Procedure, int Numerodepaginas, int cantidad, IDictionary <string, object> Parametros, string Ordenamiento)
        {
            PaginacionModel paginacion = new PaginacionModel();
            List <IDictionary <string, object> > ListaReporte;
            DynamicParameters parameters = new DynamicParameters();
            int total_records            = 0;
            int total_paginas            = 0;

            foreach (var param in Parametros)
            {
                parameters.Add("@" + param.Key, param.Value);
            }
            parameters.Add("@NumeroDePaginas", Numerodepaginas);
            parameters.Add("@CantidadDeElementos", cantidad);
            parameters.Add("@Ordenamiento", Ordenamiento);
            parameters.Add("@Total_records", total_records, System.Data.DbType.Int32, System.Data.ParameterDirection.Output);
            parameters.Add("@Total_paginas", total_paginas, System.Data.DbType.Int32, System.Data.ParameterDirection.Output);
            paginacion.NumeroDepaginas = parameters.Get <int>("Total_paginas");
            paginacion.TotalRecord     = parameters.Get <int>("Total_records");

            try
            {
                var conexion = conection.GetConnection();
                var result   = await conexion.QueryAsync(Procedure, parameters, commandType : System.Data.CommandType.StoredProcedure);

                ListaReporte           = result.Select(x => (IDictionary <string, object>)x).ToList();
                paginacion.ListaRecord = ListaReporte;
            }
            catch (Exception ex)
            {
                throw new Exception("Error {0}", ex);
            }
            return(paginacion);
        }
        public async Task <PaginacionModel> DevolverPaginacion(string storeProcedure, int numeroPagina,
                                                               int cantidadElementos, IDictionary <string, object> parametrosFiltro,
                                                               string ordenamientoColumna)
        {
            PaginacionModel paginacionModel = new PaginacionModel();
            List <IDictionary <string, object> > listaReporte = null;
            int totalRecords = 0;
            int totalPaginas = 0;

            try
            {
                var connection = _factoryConnection.GetConnection();
                DynamicParameters parametros = new DynamicParameters();

                foreach (var param in parametrosFiltro)
                {
                    parametros.Add("@" + param.Key, param.Value);
                }

                parametros.Add("@NumeroPagina", numeroPagina);
                parametros.Add("@CantidadElementos", cantidadElementos);
                parametros.Add("@Ordenamiento", ordenamientoColumna);

                parametros.Add("@TotalRecords", totalRecords, DbType.Int32, ParameterDirection.Output);
                parametros.Add("@TotalPaginas", totalPaginas, DbType.Int32, ParameterDirection.Output);

                var resultado = await connection.QueryAsync(storeProcedure, parametros,
                                                            commandType : CommandType.StoredProcedure);

                listaReporte = resultado.Select(x => (IDictionary <string, object>)x).ToList();
                paginacionModel.ListaRecords  = listaReporte;
                paginacionModel.NumeroPaginas = parametros.Get <int>("@TotalPaginas");
                paginacionModel.TotalRecords  = parametros.Get <int>("@TotalRecords");
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo ejecutar el procedimiento almacenado", ex);
            }
            finally
            {
                _factoryConnection.CloseConnection();
            }

            return(paginacionModel);
        }