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
List lista = 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