[Post do Scott Guthrie traduzido para o português]
LINQ (language integrated query - linguagem integrada de consultas) é um dos novos recursos disponíveis no VS 2008 e no .NET 3.5. LINQ torna o conceito de consultar dados um conceito de programação de primeira classe no .NET, e habilita que você expresse consultas de forma eficiente em sua linguagem preferida de programação.
Um dos benefícios da LINQ é que ela o habilita a escrever consultas de tipo-seguro em VB e C#. Isto significa que você obtem checagem em tempo de compilação para suas consultas LINQ, Intellisense completo e suporte à refatoração para o seu código:
Enquanto escrever consultas de tipo-seguro é muito legal para a maioria dos cenários, há casos nos quais você quer ter a flexibilidade de construir consultas dinamicamente em tempo de execução. Por exemplo, você poderia querer prover sua aplicação com uma interface de inteligência de negócios que possibilite a um analista de negócios utilizar menus drop-down para construir e expressar suas próprias consultas/visões sobre os dados.
Tradicionalmente estes tipos de cenários de consultas dinâmicas são atendidos com a concatenação de strings para a contrução de consultas SQL dinâmicas. Há pouco, algumas poucas pessoas me enviaram e-mails perguntando como atender a estes tipos de cenários com LINQ. O post abaixo descreve como você pode utilizar a Biblioteca de Consultas Dinâmicas disponibilizada pelo time LINQ para construir suas consultas dinamicamente.
Baixando a Biblioteca Dynamic Query da LINQ
Incluído na página de Download dos Exemplos do VS 2008 estão links para pacotes de exemplos para VB e C# que incluem uma biblioteca de ajuda (DynamicQuery helper) para consultas dinâmicas com LINQ. Links diretos para a biblioteca (e documentação) podem ser encontrados abaixo:
Ambos os exemplos da biblioteca DynamicQuery incluem os fontes da implementação e que o habilitam a expressar consultas LINQ utilizando métodos de extensão que recebem argumentos de string ao invés dos operadores seguros da linguagem. Você pode copiar/colar ambas as implementações em C# ou VB para os seus próprios projetos e então utilizá-las onde apropriado para melhor construir consultas dinâmicas definidas pelo usuário final.
Um Exemplo Simples da Biblioteca DynamicQuery
Você pode utilizar a biblioteca DynamicQuery contra qualquer provedor de dados LINQ (incluindo LINQ to SQL, LINQ to Objects, LINQ to XML, LINQ to Entities, LINQ to SharePoint, LINQ to TerraServer, etc). Ao invés de utilizar operadores da linguagem ou métodos de tipo-seguro lambda para construir suas consultas dinâmicas , a biblioteca de consultas dinâmicas fornece a você métodos de extensão baseados em string para os quais você pode passar qualquer expressão string.
Por exemplo, abaixo está uma consulta padrão de tipo-seguro LINQ que retorna dados de uma base de dados Northwind e os exibe em um controle ASP.NET Gridview:
Utilizando a biblioteca DynamicQuery LINQ eu poderia reescrever a consulta expressa acima para algo assim:
Observe como a cláusula condicional where e a cláusula de ordenação orderby agora utilizam expressões string ao invés de expressões de código. Porque elas são string late-bound eu pude construí-las dinamicamente. Por exemplo: eu poderia construir uma interface para um analista de negócios utilizando minha aplicação para permitir que ele construa consultas por ele mesmo (incluindo cláusulas condicionais arbitrárias).
Documentação para a biblioteca DynamicQuery
Incluído com as bibliotecas VB e C# acima está alguma documentação HTML que descreve como utilizar os métodos de extensão da biblioteca DynamicQuery em mais detalhes. Definitivamente vale a pena dar uma olhada se você quiser utilizar a biblioteca com mais profundidade:
Baixe e Execute um Exemplo da biblioteca DynamicQuery
Você pode baixar e rodar exemplos básicos em VB e C# que coloquei juntos para demonstrar o uso da biblioteca DynamicQuery em um web-site ASP.NET que consulta o banco de dados de exemplo Northwind utilizando LINQ to SQL.
Você pode utilizar tanto o Visual Web Developer 2008 Express ou o VS 2008 para abri-los e executá-los.
Outras Abordagens para Construir Consultas Dinâmicas com LINQ
Utilizando a biblioteca de consultas dinâmicas é muito simples e fácil de utilizar, e é particularmente útil em cenários nos quais consultas são completamente dinâmicas e você quer fornecer interface de usuário para ajudar a construí-las.
Em um futuro post do blog eu irei mergulhar fundo na construção de consultas dinâmicas, e discutir outras abordagens que você pode utilizar para estruturar seu código utilizando métodos predicados de tipo-seguro (Joseph and Ben Albahari, autores do excelente livro C# 3.0 In a Nutshell, já escreveram um bom post sobre isso aqui).
Espero que ajude,
Scott
Nota: este post foi traduzido do post original Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library) .