none
Dúvida em como selecionar um registro via linq RRS feed

  • Pergunta

  • Tenho uma tabela, onde eu gravo apenas scripts. Há um campo, onde eu separo se é script técnico ou script central. Há um campo TipoScript que char e é "C" ou "T". Essa tabela não foi bem feita, sem pensar no futuro, de forma que temos o campo NomeScript, que sempre tem o mesmo nome para scrit Técnico e o mesmo nome para script Central. A minha consulta deverá retornar os dois scripts, mas terei que fazer a diferenciação entre ambos. Confesso não saber fazer isso. Poderia colocar assim: tecnico = sc.scripttecnico, mas a única forma de saber é pelo campo TipoScript e nomear campo como eu fiz acima, tem dado pau. Alguém poderia me sugerir como fazer isso? Pode ser em lambda também.
    quarta-feira, 21 de maio de 2014 18:43

Todas as Respostas

  • Olá pnet, 

        Sugiro postar o script ou imagem de sua tabela para ver a estrutura para lhe ajudar !

    quarta-feira, 21 de maio de 2014 19:46
  • Ok, faltou isso mesmo, mas aí vai. Do jeito abaixo, dá erro em tecnico e central

    var resultado = (from _lista in db.T_PDV
                                 where _lista.CNPJ == cnpj
                                 join _st in db.T_CRM_StatusPDV on _lista.CNPJ equals(_st.DE_Cnpj)
                                 join _sc in db.T_Script on _st.IT_Status equals((int)_sc.TipoStatus)
                                 select new
                                 {
                                     _lista.CNPJ,
                                     _lista.RazaoSocial,
                                     _lista.Endereco,
                                     _lista.CaminhoLogo,
                                     _lista.Bairro,
                                     _lista.Cidade,
                                     _st.IT_Status,
                                     _st.DT_TransacaoV,
                                     tecnico = _sc.TipoScript == "T" ? _sc.Script : null,
                                     central = _sc.TipoScript == "C" ? _sc.Script : null
                                 }).ToList();

    quarta-feira, 21 de maio de 2014 19:57
  • Olá, como você mencionou o seu campo na tabela TipoScript é um char, o que vc está fazendo é atribuindo uma string a um campo char, mas para ter certeza necessitaria do erro gerado mas tente alterar e poste o erro :

    var resultado = (from _lista in db.T_PDV
                                 where _lista.CNPJ == cnpj
                                 join _st in db.T_CRM_StatusPDV on _lista.CNPJ equals(_st.DE_Cnpj)
                                 join _sc in db.T_Script on _st.IT_Status equals((int)_sc.TipoStatus)
                                 select new
                                 {
                                    CNPJ =  _lista.CNPJ,
                                    Razao = _lista.RazaoSocial,
                                     End = _lista.Endereco,
                                     Caminho = _lista.CaminhoLogo,
                                    Bairro = _lista.Bairro,
                                    Cidade = _lista.Cidade,
                                    Status = _st.IT_Status,
                                    DataT = _st.DT_TransacaoV,
                                     tecnico = _sc.TipoScript == 'T' ? _sc.Script : null,
                                     central = _sc.TipoScript == 'C' ? _sc.Script : null
                                 }).ToList();

    quarta-feira, 21 de maio de 2014 20:06
  • Então, não nme deu o erro. O erro que falei me dá em uma situação específica, no qual abrirei um outro post, pois se trata de algo diferente desse post. Bem, vou postar o código completo aqui, porque da forma que eu coloquei, só mostra um script, quando eu tenho dois script para ser visualizado. Somente o script técnico é mostrado, o script central não. O técnico no foreach que monta o xml de saída está depois do central. Veja o código:

    WEBEntities db = new WEBEntities();
                TPDV pdv = new TPDV();
                List<string> lista = new List<string>();

                var resultado = (from _lista in db.T_PDV
                                 where _lista.CNPJ == cnpj
                                 join _st in db.T_CRM_StatusPDV on _lista.CNPJ equals(_st.DE_Cnpj)
                                 join _sc in db.T_Script on _st.IT_Status equals((int)_sc.TipoStatus)
                                 select new
                                 {
                                     _lista.CNPJ,
                                     _lista.RazaoSocial,
                                     _lista.Endereco,
                                     _lista.CaminhoLogo,
                                     _lista.Bairro,
                                     _lista.Cidade,
                                     _st.IT_Status,
                                     _st.DT_TransacaoV,
                                     tecnico = _sc.TipoScript == "T" ? _sc.Script : null,
                                     central = _sc.TipoScript == "C" ? _sc.Script : null
                                 }).ToList();

                foreach (var lis in resultado)
                {
                    pdv.CNPJ = lis.CNPJ;
                    pdv.RazaoSocial = lis.RazaoSocial;
                    pdv.Endereco = lis.Endereco;
                    pdv.CaminhoLogo = lis.CaminhoLogo;
                    pdv.Bairro = lis.Bairro;
                    pdv.Cidade = lis.Cidade;
                    pdv.ScriptCentral = lis.central; => Esse não é mostrado no xml do WS
                    pdv.ScriptTecnico = lis.tecnico;
                }

                return pdv;

    quinta-feira, 22 de maio de 2014 13:00
  • Ele monta isso na tag ScriptCentral: <a:ScriptCentral i:nil="true"/>
    quinta-feira, 22 de maio de 2014 13:18
  • Ele monta isso na tag ScriptCentral: <a:ScriptCentral i:nil="true"/>
    Você usou o debug para ver se o lis.central e lis.resultado não retornan nulo ? 
    quinta-feira, 22 de maio de 2014 14:44
  • Somente o tecnico está sendo mostrado no xml. O central não. Sei que meu ternário está errado, mas mostrei apenas para exemplificar. O que gostaria mesmo é de ter os dois resultados no xml, tanto central quanto tecnico. Como eu faço isso?
    sexta-feira, 23 de maio de 2014 17:29