none
Como retornar um list tipado de uma consulta com join? RRS feed

  • Pergunta

  • tenho uma consulta q funciona certinho

    public List<TblSetor> retornoListaString()
            {      
               List<TblSetor> consulta = (from P in ef.TblSetor
                                          select P).ToList();
               return consulta;
            }
    

    porem se eu uso a consulta

     var consulta = (from p in ef.TblSetor
                               join a in ef.TblUsuario
                                   on p.id_Setor equals a.id_Setor
                               where p.id_Setor == idinstalacao
    


    que tipo eu crio o metodo??

    public List<TblSetor,TblUsuario> retornoListaString() ???

    como agora tem um join na historia o meu list nao pode ser nem do tipo

    <TblSetor> nem <TblUsuario> preciso de um tipo que retorne a linha com todos os dados do join!!!!

    como posso fazer isso? na forma de acesso convencional vc consegue usar um metodo que independente da sua consulta ele retorna um data set q pode ser facilmente manipulado!!! nos orm não temnada do tipo???

    como resolvo este problema??? retornar um list com informação de 2 tabelas unidas pelo join!!??

     



    segunda-feira, 26 de setembro de 2011 19:51

Respostas

Todas as Respostas

  • estou precisando criar m metodo que me retorne um list de string isso usando linq to entity

    exemplo do metodo que não funciona

     public List<string> retornoListaString()
            {            
                List<String> consulta = from P in ef.TblSetor
                                        select P.DescricaoSetor,P.id_Setor;                             
                
                return consulta.ToList();
            }
    

    como posso fazer o metodo acima funcionar?

     

    segunda-feira, 26 de setembro de 2011 18:03
  • Fala Filipibh,

    Cara. Veja se isto te ajuda. Peguei uma estrutura parecida com o que você está utilizando e fiz o seguinte:

    public void JoinLinq()
    {
    	var usuarios = new List<Usuario>();
    	var setores = new List<Setor>();
    
    	var join = (from u in usuarios
    				join s in setores
    				on u.IdSetor equals s.ID
    				select new { u.ID, s.Descricao, u.Idade, u.Nome, u.Email });
    
    	var nomeDoSetor = join.First().Descricao;
    }
    

    O que acontece é que a variavel join irá assumir esta nova estrutura criada (join), assumindo os atributos das duas classes.

    Espero ter ajudado.

    Falow
     


    Fernando Godoy - Blog: http://blog.lfgsistemas.com/
    terça-feira, 27 de setembro de 2011 20:56
  • Olá Filipi,

    Para atingir seu objetivo vc deve alterar o tipo de sua variável consulta para IEnumerable<String> e selecionar apenas um campo (ou contatenar todos) em sua clausula select.

    Desta maneira:

    Exemplo 01

     

    IEnumerable<string> consulta = from p in pessoas
                                    select p.Nome;
    
    return consulta.ToList();
    

     


    ou assim:

    Exemplo 02:

     

    IEnumerable<string> consulta = from p in pessoas
                                    select p.Nome + " - " + p.Idade.ToString();
    
    return consulta.ToList();
    

    []s!

    Obs.: Lembrando que a fonte de dados "pessoas" é apenas um exemplo...


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique

    quarta-feira, 28 de setembro de 2011 00:21
    Moderador
  • Amigo, para retonar o resultado da sua consulta, você tera´de criar uma classe que represente o resultado esperado e usa-la para popular o retorno da consulta, veja esta thread:

    http://social.msdn.microsoft.com/Forums/pt-BR/linqpt/thread/f6adddb7-34c9-4b5c-a45f-f83ae9fa8f62


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    quarta-feira, 28 de setembro de 2011 19:08
    Moderador