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']
Pingback: WebServices, LINQ e Entity Framework (EF4) « Blog do Eduardo H. Rizo