Array
(
)

como selecionar alguns campos de um determinado model usando linq to sql

Wallas
   - 23 jul 2012

Boa tarde a todos!
Galera eu sou novo em ASP.net e estou estudando ASP.net MVC 3 .
Eu tenho um Entity Data Model do meu Banco de Dados e nele esta a tabela produtos que por sua vez tem 38 campo minha duvida é o seguinte, tem como eu selecionar apenas 3 campos (titulo,valor,desconto) pois quando eu debugo a minha
aplicação da o seguinte erro;
O esquema especificado não é válido. Erros:
Models.md_loja.msl(269,12) : erro 2046: A mapping function binding specifies a function lojaModel.Store.valor that is not supported. Only functions that cannot be composed are supported.
Controller
lojaEntities tabelas = new lojaEntities();
public ActionResult Index()
{
var tbl_produtos = from P in tabelas.produtos
select
new
{
P.titulo,
P.valor,
P.desconto,
P.imagem
};

return View(tbl_produtos.First());
}
Só mais um coisinha quando eu crio a minha views baseada no model class produtos(asp_net.Models) ele cria uma lista com todos os campos da tabela mais eu queria que fosse apenas dos campos do meu select acima
Eu estou usando.
Mysql.
Desde já eu agradeço a todos
#Código

Renato_groffe
|
MVP
    23 jul 2012

WALLAS,

Boa tarde.

Crie uma classe que contenha esses campos. O erro acontece pois a expressão que você codificou gera objetos baseados num tipo/classe dinâmico. Ao passar essas informações para a View a mesma é incapaz de reconhecer a estrutura do objeto resultante.

Ficaria mais ou menos assim:

public class ResumoProduto
{
public string titulo { get; set; }
public decimal valor { get; set; }
public decimal desconto { get; set; }
public string imagem { get; set; }
}

E na Action:

public ActionResult Index()
{
var tbl_produtos = from P in tabelas.produtos
select
new ResumoProduto()
{
titulo = P.titulo,
valor = P.valor,
desconto = P.desconto,
imagem = P.imagem
};

return View(tbl_produtos.First());
}

Espero que isso ajude!

Wallas
   - 24 jul 2012

Valeu Retano pela ajuda
Mais agora gerou outro erro
Cannot implicitly convert type decimal? to decimal. An explicit conversion exists (are you missing a cast?)
Tanto em valor como também desconto
Controller

public ActionResult Index()
{
var tbl_produtos = from P in tabelas.produtos
select
new produtos()
{
titulo = P.titulo,
valor = P.valor,
desconto = P.desconto,
imagem = P.imagem
};

return View(tbl_produtos.First());
}

Class

namespace asp_net.Controllers
{
public class produtos
{
public string titulo { get; set; }
public decimal valor { get; set; }
public decimal desconto { get; set; }
public string imagem { get; set; }
}
}

Eu não entendi pois no model ele já está em Decimal
Tanto valor como também o desconto

Renato_groffe
|
MVP
    24 jul 2012

Tente alterar a classe de produto para o seguinte:

public class produtos
{
public string titulo { get; set; }
public decimal? valor { get; set; }
public decimal? desconto { get; set; }
public string imagem { get; set; }
}

O ? ao final do tipo indica que ele é um Nullable, ou seja, além de acertar números por exemplo, o valor null também pode estar associado a uma variável, parâmetro ou propriedade deste tipo. Como seu banco de dados provavelmente aceita NULL nestes campos, o modelo no Entity Framework foi gerado baseando-se nisto.

Espero que tenha ajudado.

Wallas
   - 26 jul 2012

Cara Veu mesmo pela dica deu certo
Fica na Paz