This article has been localized into Portuguese by the community.
Introdução
LINQ, abreviação para Language-Integrated Query, é uma tecnologia pertencente ao framework .NET, que permitirá você a fazer consultas (queries) e manipular dados de várias fontes diferentes. Em outras palavras, você pode trabalahar com os dados da mesma forma, não importando se a origem é uma lista simples, um dicionário, um XML ou tabela de uma banco de dados. LINQ vem em duas opções de sintaxe: a de Consulta (Query) e a de Método (Method). Nós discutiremos ambas em detalhes no próximo artigo, mas para deixa-lo mais empolgado com o que há por vir com LINQ , permita-me dar uma demonstração rápida do quão elegantemente LINQ pode consultar uma fonte de dados simples:
var names = new List<string>()
{
"John Doe",
"Jane Doe",
"Jenna Doe",
"Joe Doe"
};
// Get the names which are 8 characters or less, using LINQ
var shortNames = from name in names where name.Length <= 8 orderby name.Length select name;
foreach (var name in shortNames)
Console.WriteLine(name);
Em apenas uma linha, usando a sintaxe de consulta LINQ, eu pude pegar todos os nomes na lista que tem até 8 caracteres ordenando-os por tamanho! Isso é apenas UMA linha de código e isso apenas mostra uma pequena fração do que LINQ pode ser capaz! Nos próximos artigos, eu passarei por todas as possibilidades disponíveis ao usar LINQ, mas primeiro, nós deviamos falar um pouco sobre como e quando a consulta LINQ é executada.
Execução atrasada
A maioria dos programadores está acostumado a ver código sendo executado line após linha, logo pode ser que seja uma surpresa para você que uma consulta LINQ não é executada assim que a linha em que a consulta está seja alcançada. Invés disso, LINQ é executada assim que você começar a usar os dados, por exemplo, quando você itera sobre os dados ou chama um método como ToList() e Count(). Isso também significa que você pode construir uma consulta ao longo de várias linhas, quando múltiplas operações são aplicadas, mas os dados não são trazidos até que você precise. Permita-me ilustrar com uma versão extendida de um exemplo anterior, quando nós trocamos para a sintaxe de método, no lugar da sintaxe de consulta:
var names = new List<string>()
{
"John Doe",
"Jane Doe",
"Jenna Doe",
"Joe Doe"
};
// Get the names which are 8 characters or less, using LINQ
var shortNames = names.Where(name => name.Length <= 8);
// Order it by length
shortNames = shortNames.OrderBy(name => name.Length);
// Add a name to the original list
names.Add("Zoe Doe");
// Iterate over it - the query has not actually been executed yet!
// It will be as soon as we hit the foreach loop though!
foreach (var name in shortNames)
Console.WriteLine(name);
Eu adicionei alguns comentários no código, para que seja fácil de acompanhar. Também, note que eu adicionei um pouco de prova ali: depois de executar a consulta, eu adiciono o nome na lista original. Agora, se a consulta já tenha sido executada, isso significaria que isso não apareceria no resultado, mas aparece, porque é adicionado depois da consulta, mas ANTES de usarmos os dados, que acontece no loop foreach.
Isso não é de grande importância quando consultando uma lista de 4 ou 5 nomes, mas image que invés disso, nós tenhamos uma lista de 10 milhões de entradas ou talvez um banco de dados remoto. Neste caso, é bastante importante que nós não executemos múltiplas consultas quando podemos usar apenas uma.
Resumo
LINQ permite que você de maneira simples e nativa, consulte várias fontes de dados usando a mesma sintaxe - tanto a sintaxe de consulta, quanto a de método, que nós discutiremos no próximo artigo.