none
Coluna temporária em query - Entity Framework RRS feed

  • 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?
    

     

     

     




    quarta-feira, 13 de abril de 2011 03:09

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
    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.. "
    quarta-feira, 13 de abril de 2011 04:19
  • 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
    quarta-feira, 13 de abril de 2011 14:29
  • 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
    quarta-feira, 13 de abril de 2011 15:58