Usuário com melhor resposta
Linq Visual Studio 2008 - Where com conversão de tipos

Pergunta
-
Estou com a seguinte dificuldade no linq:
Já aviso que este um sistema legado sem documentação que estou tentando dar manutenção, por tanto existem um série barbarismo na modelagem e implementação de se assustar. Porém não tenho temo de refazer então tenho de conviver com os problemas.
Tenho um tabela com um campo TAG-STATUS do tipo CHAR.
Onde é gravado valores: 0, 1 , 2 .. A,B,C e por ai vai.
Preciso fazer uma um consulta com um where assim:
var recebimento = (from r in DB.TRECEBIMENTO where r.TAG_STATUS_DOCUMENTO < '5' select new { codigo = r.NUM_ID_RECEBIMENTO, usuarioRealizador = r.NUM_ID_USUARIO_REALIZADOR, usuarioConferente = r.NUM_ID_USUARIO_CONFERENTE, nomeUsuarioConferente = (from u in DB.TUSUARIO where u.NUM_ID_USUARIO == r.NUM_ID_USUARIO_CONFERENTE select u.DES_LOGIN).FirstOrDefault(), dataConferencia = r.DAT_CONFERENCIA_FIM });
Ou assim:
recebimento = recebimento.Where(v => v.IdStatusDocumento.< '7');
Teria como converter o TAG_STATUS_DOCUMENTO de char para int32 no uso do where?
O interessante que usando o LinqPad, software que executar as expressões em linq a expressão:
from r in TRECEBIMENTO where r.TAG_STATUS_DOCUMENTO < '5' select new { codigo = r.NUM_ID_RECEBIMENTO,
Funciona sem problemas!
Lembrando é linq pro .net 3.5!!Se esta não for área correta peço a fineza de mover para área correta.
Ninguém falou que seria fácil!
- Movido Seilor Bonancio Junior sexta-feira, 1 de março de 2013 14:13
Respostas
-
Junior,
Agradeço imensamente a atenção.
Ok. Com relação a converter no retorno do linq já tinha aprendido apanhando.
O que faz sentido pois na apresentação pode-se usar o format e etc.
A questão toda é com relação ao where.
Pelo que entendi, e olha sou meio lento, não teria como efetuar o seguinte where:
from r in DB.TRECEBIMENTO where r.TAG_STATUS_DOCUMENTO < 5
O problema é que o campo TAG_STATUS_DOCUMENTO é char.
E preciso efetuar uma comparação menor que com um número.
Queria algo assim:
from r in DB.TRECEBIMENTO where <int32>r.TAG_STATUS_DOCUMENTO < 5
Ou assim:
recebimento = recebimento.Where(v => <int32> v.IdStatusDocumento < 5
Alguma ideia de como contornar a situação?
Ninguém falou que seria fácil!
- Marcado como Resposta jothaz sexta-feira, 28 de novembro de 2014 22:44
Todas as Respostas
-
Em linq não tem como vc fazer um convert como fazia no sql normal tipo select convert(varchar(10),data,103) isso faz com que a data venha no formato dd/mm/aaaa. Em linq vc trata isso qdo pega a informação e a exibe para esse exemplo ele trás a data toda ou seja dd/mm/aaaa hh:mm:ss entao eu faço assim
txtdata.text = recebimento.data.substring(0,10);
deu para entender ?
Junior
-
Junior,
Agradeço imensamente a atenção.
Ok. Com relação a converter no retorno do linq já tinha aprendido apanhando.
O que faz sentido pois na apresentação pode-se usar o format e etc.
A questão toda é com relação ao where.
Pelo que entendi, e olha sou meio lento, não teria como efetuar o seguinte where:
from r in DB.TRECEBIMENTO where r.TAG_STATUS_DOCUMENTO < 5
O problema é que o campo TAG_STATUS_DOCUMENTO é char.
E preciso efetuar uma comparação menor que com um número.
Queria algo assim:
from r in DB.TRECEBIMENTO where <int32>r.TAG_STATUS_DOCUMENTO < 5
Ou assim:
recebimento = recebimento.Where(v => <int32> v.IdStatusDocumento < 5
Alguma ideia de como contornar a situação?
Ninguém falou que seria fácil!
- Marcado como Resposta jothaz sexta-feira, 28 de novembro de 2014 22:44
-
Bom depois de muito pesquisa, não achei muita referência ao Linq para o 3.5, consegui contornar a situação assim:
Faço o select e depois aplico o where no resultado do select.
var recebimento = (from r in DB......
recebimento = recebimento.Where(v => v.IdStatusDocumento.Equals("0") || v.IdStatusDocumento.Equals("1") .....
É até vergonhoso publicar um gato, ou gambi, destes, mas pelo menos tentei. kkk
Se alguém com maiores conhecimentos possuir conhecimento de algo mais elegante e simples, fico no aguardo.
Esta funcionando e não perda de performance, agora se é a melhor solução, só quem fala esta linguagem de Asmodeus, chama Linq! kkk
Ninguém falou que seria fácil!
- Sugerido como Resposta Softlesk quinta-feira, 11 de abril de 2013 13:30
-
-