LINQ, Entity Framework e Tipos Anônimos

Quando estamos trabalhando com consultas LINQ em um modelo conceitual do Entity Framework (EDMX), temos que respeitar as entitades estipuladas pelo EF (Entity Framework) e tradicionamente retornar objetos de acordo com as entidades dispostas pelo mesmo, porém, não são raras as vezes, que precisamos retornar informações que não coincidem com nenhuma entidade em particular exposta pelo modelo do EF e, para esses casos, é que entram os tipos anônimos que estamos querendo discutir neste post.

Alguns casos em que seriam necessários os tipos anônimos:

  • Eu gostaria de retornar apenas o código e o nome dos clientes e não todas as informações dos mesmos;
  • Eu gostaria de realizar uma consulta que retornasse atributos de diferentes entidades do modelo;

A criação de tipos anônimos consiste em adicionar a palavra chave new na cláusula select da consulta LINQ que você estiver realizando, veja alguns exemplos:

1. Populando um DropDownList a partir de uma lista de fornecedores


protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack)
   {
      using (NorthwindEntities contexto = new NorthwindEntities())
      {
         var dadosFornecedor = from forn in contexto.Suppliers
                               orderby forn.CompanyName
                               select new { forn.SupplierID, forn.CompanyName };

         ddlFornecedor.DataValueField = "SupplierID";
         ddlFornecedor.DataTextField = "CompanyName";
         ddlFornecedor.DataSource = dadosFornecedor;
         ddlFornecedor.DataBind();

         ddlFornecedor.Items.Insert(0, new ListItem("---- Selecione o fornecedor ----", "0"));
      }
   }
}

2. Preenchendo um GridView a partir de uma lista de produtos fornecidos pelo fornecedor selecionado no exemplo 1. Observe que a lista dos produtos não traz todos os atributos existentes na entidade


protected void ddlFornecedor_SelectedIndexChanged(object sender, EventArgs e)
{
   using (NorthwindEntities contexto = new NorthwindEntities())
   {
      int codigoFornecedor = Convert.ToInt32(ddlFornecedor.SelectedValue);
      var dadosProdutos = from prod in contexto.Products
                          where prod.SupplierID == codigoFornecedor
                          orderby prod.ProductName
                          select new { prod.ProductID,
                                       prod.ProductName,
                                       prod.Categories.CategoryName,
                                       prod.Discontinued
                                     };

      gvProdutos.DataSource = dadosProdutos;
      gvProdutos.DataBind();
   }
}

Posts relacionados:

1. LINQ e Entity Framework
2. Operações CRUD com Entity Framework
3. ADO.NET Entity Framework – Introdução + Exemplo prático

Para quaisquer outras dúvidas, é só perguntar.

Grande abraço,
Eduardo Henrique Rizo

Anúncios

Coordenador de Internet da Universidade do Oeste Paulista (Unoeste) e professor universitário de disciplinas relacionadas ao desenvolvimento de sistemas para Web, gerenciamento de servidores, serviços e redes.

Marcado com: , , , ,
Publicado em ASP.NET, Desenvolvimento Web, Entity Framework, LINQ, Microsoft
Um comentário em “LINQ, Entity Framework e Tipos Anônimos
  1. […] 1. LINQ, Entity Framework e Tipos Anônimos 2. LINQ e Entity Framework 3. Operações CRUD com Entity Framework 4. ADO.NET Entity Framework – Introdução + Exemplo prático […]

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Erro: o Twitter não respondeu. Por favor, aguarde alguns minutos e atualize esta página.

Sorocaba e Região
Prestadora de serviços RIZZO GS - Sorocaba/SP

Serviços de limpeza, conservação, recepção, copa, portaria, vigia, zeladoria, jardim, elétrica, hidráulica, pintura, etc.

Contato: (15) 3357-4263 / (15) 3357-4502 - contato@rizzogs.com.br

Website: http://www.rizzogs.com.br

%d blogueiros gostam disto: