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

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

1 comentário em “LINQ, Entity Framework e Tipos Anônimos”

  1. Pingback: WebServices, LINQ e Entity Framework (EF4) « Blog do Eduardo H. Rizo

Deixe um comentário