Paginação usando LINQ

linq-logoOlá pessoal, tudo bom?

Por vezes nos deparamos com a necessidade de paginar o resultado de consultas para que o usuário possa ter melhor experiência de uso sobre o nosso software e, caso você esteja desenvolvendo utilizando LINQ, saiba que também temos uma forma muito simples de segmentar o retorno dos dados (consulta) através dos métodos Skip e Take, onde o primeiro “pula” uma certa quantidade de registros e o segundo “pega” a quantidade de registros especificados para ele. Vejamos o exemplo a seguir:


public List<AtividadeDTO> ObterListaAtividades(int codigoFuncionario, int numeroPagina, int registrosPorPagina)
{
  int salto = 0;
  try
  {
    using (HelpDeskEntities contexto = new HelpDeskEntities(Util.ConnectionString))
    {
      if (numeroPagina > 1)
        salto = (numeroPagina - 1) * registrosPorPagina;

      var dados = (from a in contexto.Atividade
                   where a.CodigoFuncionario == codigoFuncionario
                   orderby a.DataInicio descending
                   select new AtividadeDTO
                   {
                     Codigo = a.Codigo,
                     Descricao = a.Descricao,
                     DataInicio = a.DataInicio,
                     DataFim = a.DataFim,
                     Status = a.Status.Descricao,
                     Solicitante = a.Solicitante.Nome
                   }).Skip(salto).Take(registrosPorPagina).ToList();
      return dados;
    }
  }
  catch
  {
    return null;
  }
}

No exemplo utilizei um contexto do Entity Framework para retornar os dados, mas isso poderia ser feito de quaisquer outras formas, pois o importante a ser notado é o uso das instruções Skip e Take ao final da consulta LINQ.

Grande abraço,
Eduardo Henrique Rizo

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

Deixe um comentário