LINQ, tipos anônimos e retorno de dados

Olá pessoal, tudo bom?

Caso já tenham se deparado com a necessidade de realizar o retorno do resultado de uma consulta LINQ que gera tipos anônimos, devem ter notado que essa tarefa não se torna possível, justamente pelo fato do resultado anônimo não corresponder a nenhuma outra classe que você possua em seu projeto.

Pensando nesse caso, resolvi escrever esse post para tentar facilitar um pouco essa situação.

Imagine que você necessite retornar de um método um resultado anônimo que corresponde ao “código do cliente” (código), “nome do cliente” (nome), “cidade do cliente” (cidade) e o “sexo do cliente” (sexo). Essa estrutura certamente não deve fazer parte do seu modelo conceitual do Entity Framework (EF4) e por isso, uma possível solução para realizar o retorno dessa estrutura seria:

1) Crie uma classe em seu projeto que represente a estrutura desejada:


public class ClienteCustomizado
{
   public int codigo { get; set; }
   public string nome { get; set; }
   public string cidade { get; set; }
   public string sexo { get; set; }
}

2) Faça o método que possui a consulta LINQ anônima, retornar uma lista da classe criada no item 1


public List<ClienteCustomizado> RetornaClientes(int codigoRegiao)
{
   using (ERPEntities contexto = new ERPEntities())
   {
      var dados = (from cli in contexto.Clientes
            where cli.Regioes.reg_codigo == codigoRegiao && cli.cliente_ativo == "S"
            select new ClienteCustomizado()
                       {
                          codigo = cli.codigo,
                          nome = cli.nome,
                          cidade = cli.Cidades.nome_cidade,
                          sexo = cli.sexo
                       }).ToList();

      return dados;
   }
}

Viu como é simples?

Grande abraço,
Eduardo Henrique Rizo


Posts relacionados

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

Marcado com: , , , , ,

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*