Exemple #1
0
        public static List <TEntity> FiltrarPorBusqueda <TEntity>(RequestPaginado param, List <TEntity> lista)
        {
            if (string.IsNullOrEmpty(param.Search.Value))
            {
                return(lista);
            }

            Expression <Func <TEntity, bool> > expr = x => false;
            var propiedades = typeof(TEntity).GetProperties();

            //Por cada propiedad hace el filtrado
            foreach (var propertyInfo in propiedades)
            {
                //Se usa LinqKit para poder usar metodo Or
                expr = expr.Or(x => x.GetType().GetProperty(propertyInfo.Name).GetValue(x, null) != null &&
                               x.GetType().GetProperty(propertyInfo.Name).GetValue(x, null).ToString()
                               .Contains(param.Search.Value));
            }

            lista = lista.AsQueryable()
                    .Where(expr)
                    .ToList();

            return(lista);
        }
        public IHttpActionResult PostGet(bool paginado, RequestPaginado param)
        {
            if (paginado == false) // Si no se manda paginado en true entonces obtiene todos los datos sin paginar
            {
                return(Get());
            }

            var listaUsuarios = _usuarioService.ObtenListaUsuarios();

            var totalUs = listaUsuarios.Count;

            listaUsuarios = DataTableUtils.FiltrarPorBusqueda(param, listaUsuarios);

            listaUsuarios = DataTableUtils.Ordenar(param, listaUsuarios);

            var datosPagina = listaUsuarios
                              .Skip(param.Start)
                              .Take(param.Length)
                              .ToList();

            var result = new ResultadoPaginado <Usuario>()
            {
                Data            = datosPagina,
                Draw            = param.Draw,
                RecordsFiltered = listaUsuarios.Count,
                RecordsTotal    = totalUs
            };

            return(Ok(result));
        }
Exemple #3
0
        public static List <TEntity> Ordenar <TEntity>(RequestPaginado param, List <TEntity> listaUsuarios)
        {
            var propiedades = typeof(TEntity).GetProperties();

            //por cada propiedad revisa si hay que aplicar ordenamiento
            foreach (var propertyInfo in propiedades)
            {
                if (param.Columns[param.Order[0].Column].Data.ToUpper() == propertyInfo.Name.ToUpper() &&
                    param.Order[0].Dir == "asc")
                {
                    listaUsuarios = listaUsuarios.OrderBy(x => x.GetType().GetProperty(propertyInfo.Name)?.GetValue(x, null))
                                    .ToList();
                }
                if (param.Columns[param.Order[0].Column].Data.ToUpper() == propertyInfo.Name.ToUpper() &&
                    param.Order[0].Dir == "desc")
                {
                    listaUsuarios = listaUsuarios
                                    .OrderByDescending(x => x.GetType().GetProperty(propertyInfo.Name)?.GetValue(x, null)).ToList();
                }
            }

            return(listaUsuarios);
        }