Usuário com melhor resposta
Coluna temporária em query - Entity Framework

Pergunta
-
Olá pessoal,
Estou tentando fazer uma consulta com EF em que uma coluna no DB possui apenas uma letra, mas quero que durante a consulta (ou após) eu possa mudar o valor dessa coluna para poder colocar a descrição por extenso. Por exemplo, se a coluna tiver a letra "C" quero mudar o valor da mesma para "CANCELADO".
Estou tentando da maneira abaixo, porém, não consigo alterar o valor da coluna já que ela fica como readonly quando meu select define as colunas do resultado.
No exemplo abaixo não posso alterar item.situacao por ser somente leitura...
var pedidos = from p in ctx.pedido join c in ctx.cliente on p.idCliente equals c.idCliente orderby p.data, c.nome select new { p.data, p.tipo, p.situacao, p.nomeBalcao, p.total, c.nome }; foreach (var item in pedidos) item.situacao = item.situacao == "C" ? "Cancelado" : "Normal";
Alguém saberia como posso fazer nesses casos?
Respostas
-
Consegui resolver... o que tive que fazer é gerar uma lista a partir do resultado do SELECT... para então alterar os campos das mesma... e por fim enviar para o Crystal.
Att
Wagner Samuel de Oliveira
WSO Software
www.wso.com.br- Marcado como Resposta Wagner Samuel de Oliveira quarta-feira, 13 de abril de 2011 15:58
Todas as Respostas
-
Opa, eai ?
O item.situacao é somente leitura pois o mesmo é um tipo anonimo, vc esta filtrando os dados usando o essa sintaxe ( select new { p.data, p.tipo, p.situacao, p.nomeBalcao, p.total, c.nome };)
Da uma olhada neste topico: http://stackoverflow.com/questions/534690/linq-to-sql-return-anonymous-type
Abs,
Nelson Borges
Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/ "Ao infinito e além.. " -
Olá Nelson,
No link que passou é dada a solução de se criar uma classe com os campos que usarei na consulta... era bem essa a idéia que eu estava tendo.
Os outros exemplos são bem mais pontuais... não havia implementado ainda a solução citada por achar que devesse haver uma solução mais prática, sem precisar criar uma classe auxiliar.
Agora estou com outro problema... implementando a classe auxiliar, quando faço a alteração em um foreach os campos não ficam como o novo valor. Detalhe: estou enviando para um relatório Crystal :)
var pedidos = from p in ctx.pedido join c in ctx.cliente on p.idCliente equals c.idCliente orderby p.data, c.nome select new retornoSelect() { Data = p.data, Tipo = p.tipo, Situacao = p.situacao, Nome = c.nome, Total = p.total }; foreach (retornoSelect item in pedidos) item.situacao = item.situacao == "C" ? "Cancelado" : "Normal" Report.SetDataSource(pedidos);
O que acontece após esse código é que no relatório o campo situacao está apenas com o valor "C" ou "N".
Abraço
- Sugerido como Resposta Roberto.Fonseca quinta-feira, 1 de setembro de 2011 14:37
- Não Sugerido como Resposta Roberto.Fonseca quinta-feira, 1 de setembro de 2011 14:37
-
Consegui resolver... o que tive que fazer é gerar uma lista a partir do resultado do SELECT... para então alterar os campos das mesma... e por fim enviar para o Crystal.
Att
Wagner Samuel de Oliveira
WSO Software
www.wso.com.br- Marcado como Resposta Wagner Samuel de Oliveira quarta-feira, 13 de abril de 2011 15:58