Tipos anônimos e Linq query

segunda-feira, 4 de janeiro de 2010 Postado por Luis Fernando
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.


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)

Postar um comentário