Tipos anônimos e Linq query
segunda-feira, 4 de janeiro de 2010
Nem sempre tipos anônimos são a melhor opção para armazenar o resultado de uma Linq query.
Os tipos anônimos (Anonymous Types) são realmente muito práticos numa ling query. Mas e quando você precisa retornar um elemento dessa query?
Criar um método para retornar um tipo anônimo poderia ser uma solução, mas eu prefiro manter a característica mais marcante da linguagem C#, o “strong typed language” ou “linguagem fortemente tipada”.
No exemplo abaixo, eu estou criando uma nova classe (ResultSet) que vai servir apenas para armazenar o resultado de uma linq query sobre uma lista de fornecedores personalizada.
Os tipos anônimos (Anonymous Types) são realmente muito práticos numa ling query. Mas e quando você precisa retornar um elemento dessa query?
Criar um método para retornar um tipo anônimo poderia ser uma solução, mas eu prefiro manter a característica mais marcante da linguagem C#, o “strong typed language” ou “linguagem fortemente tipada”.
No exemplo abaixo, eu estou criando uma nova classe (ResultSet) que vai servir apenas para armazenar o resultado de uma linq query sobre uma lista de fornecedores personalizada.
using System; using System.Collections.Generic; using System.Linq; namespace TiposAnonimos { class Program { //Classe de persistencia class Fornecedor { public int ID { get; set; } public string Nome { get; set; } public string CNPJ { get; set; } public string Telefone { get; set; } public string Rua { get; set; } public string Bairro { get; set; } public string Cidade { get; set; } public string CEP { get; set; } public string Estado { get; set; } } //Defina uma classe para conter o resultado da linq query class ResultSet { public int Codigo { get; set; } public string Nome { get; set; } public string CNPJ { get; set; } } public static void Main(string[] args) { Fornecedor f1 = new Fornecedor(); //Populando uma lista de fornecedores //Não vou preencher todos os dados por uma questão de espaço Listlista = new List () { new Fornecedor() {ID=1, Nome="Fornecedor1", CNPJ="11.111.111/1111-11"}, new Fornecedor() {ID=2, Nome="Fornecedor2", CNPJ="22.222.222/2222-22"}, new Fornecedor() {ID=3, Nome="Fornecedor3", CNPJ="33.333.333/3333-33"}, new Fornecedor() {ID=4, Nome="Fornecedor4", CNPJ="44.444.444/4444-44"}, new Fornecedor() {ID=5, Nome="Fornecedor5", CNPJ="55.555.555/5555-55"}, new Fornecedor() {ID=6, Nome="Fornecedor6", CNPJ="66.666.666/6666-66"}, new Fornecedor() {ID=7, Nome="Fornecedor7", CNPJ="77.777.777/7777-77"}, new Fornecedor() {ID=8, Nome="Fornecedor8", CNPJ="88.888.888/8888-88"}, new Fornecedor() {ID=9, Nome="Fornecedor9", CNPJ="99.999.999/9999-99"}, }; //Em fim, a ling query que retorna apenas alguns dados essenciais //Ideal para preencher um DataGridView, por exemplo var query = (from f in lista select new ResultSet() { Codigo = f.ID, Nome = f.Nome, CNPJ = f.CNPJ }).ToList(); //Mostra os resultados na tela query.ForEach(f => { Console.WriteLine("Codigo: {0} || Nome: {1} || CNPJ: {2}", f.Codigo, f.Nome, f.CNPJ); }); Console.ReadKey(); } } }//desconsidere essa linha, é um bug do HTML (O_o)
Marcadores:
Anonymous Types,
Csharp,
Lambda Expression,
Linq