C# - LINQ prático e rápido
Vou mostrar como usar os recursos do LINQ na linguagem C# de forma bem objetiva com um enfoque essencialmente prático dando o mínimo de teoria possível. |
Vou adotar o estilo problema/solução onde é apresentando um problema e em seguida mostrado uma das soluções possíveis no caso usando LINQ.
1- Como selecionar itens a partir de uma coleção (XML ou database) ?
A plataforma .NET permite que usamos o LINQ para consultar arrays, coleções, documentos XML e banco de dados praticamente da mesma forma.
Para resolver este problema vamos definir o nome do elemento variável e usá-lo como base para resolução do problema:
IEnumerable<meuTipo> meuEnum = from e in fonte_dados select e;
O tipo que for usado para referência da fonte de dados deve implementar a interface Generic.IEnumerable. Se usarmos uma matriz ou uma coleção genérica então basta usar as referências pertinentes:
IEnumerable<meuTipo>
meuEnum = from e in array select e;
IEnumerable<meuTipo> meuEnum = from e in coleção select
e;
Se estivermos usando uma árvore XML, podemos obter um IEnumerable da raiz XElement chamando o método Element. Para um DataTable podemos obter um IEnumerable chamando o método AsEnumerable:
IEnumerable<XElement>
meuEnum = from e in root.Elements() select e;
IEnumerable<DataRow> meuEnum = from e in
table.AsEnumerable() select e;
Obs: Observe que o tipo genérico do resultado vai depender da fonte de dados.
Se você quiser selecionar um valor contido em um elemento da fonte de dados basta especificar o valor desejado após a palavra-chave select:
IEnumerable<string> meuEnum = from e in fonte_dados select e.Name;
A interface IEnumberable<> pode ser usada em um laço foreach para enumerar os resultados de uma consulta pois a consultas LINQ retornam instâncias de IEnumerable<> e uma fonte de dados para o LINQ deve implementar IEnumerable.
Vejamos então um exemplo prático aplicando o LINQ para realizar consultas em uma coleção.
Abra o Visual C# Express Edition e crie um novo projeto do tipo Console Application com o nome Usando_LINQ;
using System; using System.Collections.Generic; using System.Linq; namespace LINQ_Pratico1 { class Program { static void Main(string[] args) { // Cria os dados IList<Fruta> fonteDados = criaDados(); // Filtra baseado em uma única característica IEnumerable<string> resultado1 = from e in fonteDados where e.Cor == "vermelha" select e.Nome; Console.WriteLine("Filtrar por fruta - vermelha"); foreach (string str in resultado1) { Console.WriteLine("Fruta {0}", str); } // Filtro usando o operador > IEnumerable<Fruta> resultado2 = from e in fonteDados where e.Preco > 5 select e; Console.WriteLine("\nFiltrar para preco > 5"); foreach (Fruta Fruta in resultado2) { Console.WriteLine("Fruta {0}", Fruta.Nome); } // Filtra usando duas caracteristicas IEnumerable<string> resultado3 = from e in fonteDados where e.Cor == "verde" && e.Preco > 5 select e.Nome; Console.WriteLine("\nFiltrar para Fruta verde e preco > 5"); foreach (string str in resultado3) { Console.WriteLine("Fruta {0}", str); } // // Aguarda para continuar. Console.WriteLine("\nOperação concluída. Pressione Enter"); Console.ReadLine(); } /// <summary> /// criaDados -cria uma coleção de frutas /// </summary> /// <returns></returns> static IList<Fruta> criaDados() { return new List<Fruta>() { new Fruta("maça", "verde", 7), new Fruta("laranja", "laranja", 10), new Fruta("uva", "verde", 4), new Fruta("figo", "marrom", 12), new Fruta("ameixa", "vermelha", 2), new Fruta("banana", "amarela", 10), new Fruta("morango", "vermelha", 7) }; } /// <summary> /// Fruta - defina a classe fruta com: nome ,cor e preco /// </summary> class Fruta { public Fruta(string namearg, string corarg, int precoarg) { Nome = namearg; Cor = corarg; Preco = precoarg; } public string Nome { get; set;} public string Cor { get; set;} public int Preco { get; set;} } } } |
Podemos obter o mesmo resultado de uma maneira mais simples e é isso que veremos em outros artigos sobre LINQ.
Veja como consultar XML com LINQ neste artigo: XML - Consultando com LINQ
Eu sei é apenas LINQ, mas eu gosto...
Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ??
Chegou o
Super DVD C# com exclusivo material de
suporte e vídeo aulas com curso básico sobre C# |
Referências:
Super DVD .NET - Centenas de aplicativos com código fonte para você aprender