O Linq possibilita a escrita de queries independentemente da linguagem da base de dados ou linguagem de cosulta.
O Linq define um conjunto de operações SQL padrão que podem manusear qualquer fonte de dados. Esse conjunto de operações é fornecido através de extensões disponíveis na arquitectura Linq.
Essas extensões são:
Linq to Objects Disponibiliza consultas com o objecto IEnumerable para fontes de informação do tipo array, collections ou lists;
Linq to XML Disponibiliza meios eficiente e de fácil manipulação de dados em XML e funcionalidades para programação de XPath e XQuery;
Linq to SQL Esta extensão possibilita o acesso a objectos de bases de dados relacionais tal como se acessa a objectos .NET;
Linq to DataSet Facilidades de consulta com o ADO.NET Dataset;
Linq to Entities Fornece capacidades de consulta às entidades ADO.NET.
Um exemplo de uma query simples num array ficará desta forma:
int[] num = { 5, 3, 4, 0, 6, 7, 6, 2, 3 };
var menores = from n in num
where n < 5
select n;
Nesta query temos o from utilizado como um foreach, o operador where utilizado como selecção condicional e o select como selector dos dados, campos do array. A isto se chama Standard Query Operators.
A consulta feita vai devolver um objecto IEnumerable<T> que referencia um objecto em memória com inteiros, em que os valores são menores que 5.
A mesma sintaxe é utilizada quando fazemos consultas em objectos. Neste caso podemos fazer da seguinte forma:
List<Produto> produtos = GetProductList();
var expensiveInStockProdutos =
from p in produtos
where p.UnitsInStock > 0 && p.UnitPreco > 10.00M
select p ;
ArrayList list = new ArrayList();
foreach (var i in expensiveInStockProdutos)
list.Add(i);
ProdutosGrid.AutoGenerateColumns = true;
ProdutosGrid.DataSource = list;
ProducosGrid.DataBind();
Esta consulta utilize o commando where para encontrar todos os produtos em stock e com um preço maior que 10. A variável produtos refere-se ao objecto produtos inicializado com o método GetProductList().
A variável expensiveInStockProdutos é do tipo IEnumerable<produto> que referencia uma colecção de objectos é equivalente ao tipo de produto.
Os produtos no expensiveInStockProdutos são adicionados a uma ArrayList utilizada depois numa tabela onde apresentará os dados, por exemplo numa página aspx.
O ProdutosGrid.AutoGenerateColumns está como True uma vez que permite gerar dinamicamente as colunas com os nomes resultantes da query.