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.
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ... 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
[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]
Muito bom, obrigado pelo dica!
É possível fazer também utilizando o PredicateBuilder, conforme o link abaixo:
http://www.albahari.com/nutshell/predicatebuilder.aspx
Um abraço!
Olá, tudo bom?
Não conheço o PredicateBuilder, mas vou tentar arrumar um tempinho para pesquisa e logo que consiga, te respondo.
Abraços,
Eduardo H. Rizo