예제 #1
0
        public async Task <ProcurarSaida> Procurar(ProcurarPeriodoEntrada procurarEntrada)
        {
            var query = _efContext.Periodos
                        .AsNoTracking()
                        .Where(x => x.IdUsuario == procurarEntrada.IdUsuario)
                        .AsQueryable();

            if (!string.IsNullOrEmpty(procurarEntrada.Nome))
            {
                query = query.Where(x => x.Nome.IndexOf(procurarEntrada.Nome, StringComparison.InvariantCultureIgnoreCase) != -1);
            }

            if (procurarEntrada.Data.HasValue)
            {
                query = query.Where(x => x.DataInicio <= procurarEntrada.Data.Value.Date && x.DataFim >= procurarEntrada.Data.Value.Date);
            }

            switch (procurarEntrada.OrdenarPor)
            {
            case PeriodoOrdenarPor.DataFim:
                query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.DataFim) : query.OrderByDescending(x => x.DataFim);
                break;

            case PeriodoOrdenarPor.DataInicio:
                query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.DataInicio) : query.OrderByDescending(x => x.DataInicio);
                break;

            case PeriodoOrdenarPor.Nome:
                query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.Nome) : query.OrderByDescending(x => x.Nome);
                break;

            default:
                query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.Id) : query.OrderByDescending(x => x.Id);
                break;
            }

            if (procurarEntrada.Paginar())
            {
                var pagedList = await query.ToPagedListAsync(procurarEntrada.PaginaIndex.Value, procurarEntrada.PaginaTamanho.Value);

                return(new ProcurarSaida(
                           pagedList.ToList().Select(x => new PeriodoSaida(x)),
                           procurarEntrada.OrdenarPor.ToString(),
                           procurarEntrada.OrdenarSentido,
                           pagedList.TotalItemCount,
                           pagedList.PageCount,
                           procurarEntrada.PaginaIndex,
                           procurarEntrada.PaginaTamanho));
            }
            else
            {
                var totalRegistros = query.Count();

                return(new ProcurarSaida(
                           query.ToList().Select(x => new PeriodoSaida(x)),
                           procurarEntrada.OrdenarPor.ToString(),
                           procurarEntrada.OrdenarSentido,
                           totalRegistros));
            }
        }
예제 #2
0
        public async Task <ProcurarSaida> Procurar(ProcurarPeriodoEntrada procurarEntrada)
        {
            var query = _efContext.Periodos
                        .AsNoTracking()
                        .AsQueryable();

            if (!string.IsNullOrEmpty(procurarEntrada.Nome))
            {
                query = query.Where(x => x.Nome.IndexOf(procurarEntrada.Nome, StringComparison.InvariantCultureIgnoreCase) != -1);
            }

            if (procurarEntrada.Data.HasValue)
            {
                query = query.Where(x => x.DataInicio <= procurarEntrada.Data.Value.Date && x.DataFim >= procurarEntrada.Data.Value.Date);
            }

            query = query.OrderByProperty(procurarEntrada.OrdenarPor, procurarEntrada.OrdenarSentido);

            if (procurarEntrada.Paginar())
            {
                var pagedList = await query.ToPagedListAsync(procurarEntrada.PaginaIndex.Value, procurarEntrada.PaginaTamanho.Value);

                return(new ProcurarSaida(
                           pagedList.ToList().Select(x => new PeriodoSaida(x)),
                           procurarEntrada.OrdenarPor,
                           procurarEntrada.OrdenarSentido,
                           pagedList.TotalItemCount,
                           pagedList.PageCount,
                           procurarEntrada.PaginaIndex,
                           procurarEntrada.PaginaTamanho));
            }
            else
            {
                var totalRegistros = await query.CountAsync();

                return(new ProcurarSaida(
                           (await query.ToListAsync()).Select(x => new PeriodoSaida(x)),
                           procurarEntrada.OrdenarPor,
                           procurarEntrada.OrdenarSentido,
                           totalRegistros));
            }
        }