LINQ: Criando consultas dinâmicas em C#

Olá pessoal, tudo bom?

O LINQ é uma excepcional ferramenta para consultas em fontes de dados de diferentes espécies, mas pode nos trazer complicações nos momentos onde precisamos personalizar a query de acordo com filtros que o usuário possa escolher na tela.

Por exemplo, suponha que você exiba em um grid a relação de contas bancárias cadastradas para um determinado cliente, porém o usuário pode escolher entre exibir TODAS as contas ou APENAS as que estão ativas em um dado momento.

filtro-linq

Nesse caso, teremos que “montar a query” LINQ dinamicamente, mas como?

Existe uma biblioteca denominada Dynamic LINQ (System.Linq.Dynamic) que nos permite informar critérios de consulta parecidos com SQL para a cláusula Where, OrderBy, etc, porém, para fazer uso desse recurso é necessário referencia-lo em nosso projeto. Vejamos:

Passo 1: Referenciar o namespace System.Linq.Dynamic em nosso projeto através do Package Manager Console do Visual Studio.

PM> Install-Package System.Linq.Dynamic

Passo 2: Montar a consulta dinamicamente. Exemplo:

...
using System.Linq.Dynamic;
...
...
public List<Conta> Contas(int idCedente, bool apenasAtivas)
{
  try
  {
    string criterio = string.Format("CedenteID = {0}", idCedente);
    if (apenasAtivas)
       criterio += " AND Ativa = \"S\"";

    using (DadosEntities contexto = new DadosEntities(Helper.Util.ConnectionString))
    {
      return contexto.CedenteConta.Where(criterio).OrderBy(x => x.BancoID).ToList();
    }
  }
  catch
  {
    return null;
  }
}

Grande abraço,
Eduardo Henrique Rizo

Anúncios

Coordenador de Internet da Universidade do Oeste Paulista (Unoeste) e professor universitário de disciplinas relacionadas ao desenvolvimento de sistemas para Web, gerenciamento de servidores, serviços e redes.

Marcado com: , , , , , , , ,
Publicado em ASP.NET, Entity Framework, LINQ

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Sorocaba e Região
Prestadora de serviços RIZZO GS - Sorocaba/SP

Serviços de limpeza, conservação, recepção, copa, portaria, vigia, zeladoria, jardim, elétrica, hidráulica, pintura, etc.

Contato: (15) 3357-4263 / (15) 3357-4502 - contato@rizzogs.com.br

Website: http://www.rizzogs.com.br

%d blogueiros gostam disto: