public ListaPaginacao <Palavra> ObterTodas(PalavraUrlParams query)
        {
            var lista = new ListaPaginacao <Palavra>();
            var itens = _banco.palavras.AsNoTracking().AsQueryable();

            if (query.DataFiltro.HasValue)
            {
                itens = itens.Where(x => x.Criado >= query.DataFiltro.Value);
            }

            if (query.PagNumero.HasValue)
            {
                var qtditens = itens.Count();
                itens = itens.Skip((query.PagNumero.Value - 1) * query.RegistroPorPag.Value).Take(query.RegistroPorPag.Value);

                Paginacao pagina = new Paginacao();
                pagina.NumeroPagina      = query.PagNumero.Value;
                pagina.RegistroPorPagina = query.RegistroPorPag.Value;
                pagina.TotalRegistros    = qtditens;
                pagina.TotalPaginas      = (int)Math.Ceiling((double)qtditens / query.RegistroPorPag.Value);

                lista.paginacao = pagina;
            }

            lista.Resultados.AddRange(itens.ToList());
            return(lista);
        }
        public ActionResult ObterTodas([FromQuery] PalavraUrlParams query)
        {
            var itens = _repository.ObterTodas(query);

            if (itens.Resultados.Count == 0)
            {
                return(NotFound());
            }

            ListaPaginacao <PalavraDTO> lista = CriarLinks(query, itens);

            return(Ok(lista));
        }
        private ListaPaginacao <PalavraDTO> CriarLinks(PalavraUrlParams query, ListaPaginacao <Palavra> itens)
        {
            var lista = _mapper.Map <ListaPaginacao <Palavra>, ListaPaginacao <PalavraDTO> >(itens);

            foreach (var palavra in lista.Resultados)
            {
                palavra.Links = new List <LinkDTO>();
                palavra.Links.Add(
                    new LinkDTO("self", Url.Link("ObterPalavra", new { id = palavra.Id }), "GET")
                    );
            }
            if (itens.paginacao != null)
            {
                Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(itens.paginacao));
            }

            lista.Links.Add(new LinkDTO("self", Url.Link("ObterTodas", query), "GET"));

            if (query.PagNumero.HasValue && query.PagNumero.Value + 1 <= itens.paginacao.TotalPaginas)
            {
                var querytrig = new PalavraUrlParams()
                {
                    PagNumero = query.PagNumero + 1, RegistroPorPag = query.RegistroPorPag, DataFiltro = query.DataFiltro
                };
                lista.Links.Add(new LinkDTO("proximo", Url.Link("ObterTodas", querytrig), "GET"));
            }
            if (query.PagNumero.HasValue && query.PagNumero.Value - 1 > 0)
            {
                var querytrig = new PalavraUrlParams()
                {
                    PagNumero = query.PagNumero - 1, RegistroPorPag = query.RegistroPorPag, DataFiltro = query.DataFiltro
                };
                lista.Links.Add(new LinkDTO("Anterior", Url.Link("ObterTodas", querytrig), "GET"));
            }

            return(lista);
        }