none
Join com lambda RRS feed

  • Pergunta

  • Pessoal,

    Estou usando aqui uma classe da microsoft que é o dynamic query.

    Essa classe so trabalha com lambda expression... gostaria de saber como eu faço o join entre 3 tabelas com lambda. No caso aqui tenho a tabela de pessoa, endereco e cidade, que estão se relacionando.

    E também preciso saber como retornar 3 campos, sendo 1 da tabela pessoa, 1 da endereço e outro da cidade.

     

    Alguém tem alguma referencia ou algum exemplo?

     

    Fico muito grato com essa ajuda.

     


    Henrique Fávaro Tâmbalo - Se a resposta ajudou, marque como resposta!
    terça-feira, 18 de maio de 2010 18:30

Respostas

  •  Olá Enrique, tudo certo?! ( espero que sim )...

    Criei 3 tabelas aqui para reproduzir o teu exemplo...

    Segue o join utilizando lambda com 3 tabelas:

          var oQuery = oEntities.Contatoes.Join(oEntities.Empresas, 
                              c => c.CodigoEmpresa, 
                              e => e.Codigo, (c, e) => new { e, c }
                             ).Join(oEntities.TipoEmpresas, 
                                 e => e.e.CodigoTipoEmpresa, 
                                 t => t.Codigo, (e, t) => new {
                                                  Nome = e.c.Nome,
                                                  NomeEmpresa = e.e.Nome,
                                                  TipoEmpresa = t.Descricao
                                                });


    Abraço, Espero ter ajudado. Caso sim, marque-a como tal.
    sexta-feira, 4 de junho de 2010 03:57

Todas as Respostas

  • sexta-feira, 21 de maio de 2010 22:28
    Moderador
  • André,

     

    Fiz dessa maneira, o que eu preciso é colocar mais uma tabela.


    Henrique Fávaro Tâmbalo - Se a resposta ajudou, marque como resposta!
    quarta-feira, 26 de maio de 2010 11:05
  • Henrique,

    No post que te passei o MVP que respondeu a pergunta está mostrando como fazer um join entre duas tabelas usando 100% lambda expression (ele está fazendo um join entre as tabelas Records e RecordProperties)...

    Não é isso que você está querendo fazer?

    Como seria a query LINQ correspondente ao resultado que você está querendo?


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    sexta-feira, 28 de maio de 2010 21:15
    Moderador
  • André,

     

    Precisava fazer o join entre Records, RecordProperties e RecordPropertiesDetails ou seja com 3 tabelas...

     

            var query = from p in ctx.Pessoas
                  join e in ctx.Enderecos on p.pesCodigo equals e.pesCodigo
                  join c in ctx.Cidades on e.cidCodigo equals c.cidCodigo
                  select new 
                    {
                      p.pesRazaoSocialNome, 
                      e.endLogradouro,
                      c.cidNome
                    };
    É esta query que eu precisava fazer em lambda.


    Henrique Fávaro Tâmbalo - Se a resposta ajudou, marque como resposta!
    terça-feira, 1 de junho de 2010 11:50
  • Henrique,

    Você tentou algo como:

    ctx.Pessoas.SelectMany(
     p => ctx.Enderecos.Where(e => p.pesCodigo == e.pesCodigo),
     (p, e) =>
      new
      {
       p.pesRazaoSocialNome,
       e.endLogradouro,
       e.cidCodigo
      }
     ).SelectMany(
     pe => ctx.Cidades.Where(c => pe.cidCodigo == c.cidCodigo),
     (pe, c) =>
      new
      {
       pe.pesRazaoSocialNome,
       pe.endLogradouro,
       c.cidNome
      }
    );

    Obs.: pode ser que tenha algum erro de sintaxe aí porque eu não testei o código... Escreví no notepad aqui... Mas, deu pra entender a ideia?


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    • Sugerido como Resposta Iter Lubnon sexta-feira, 4 de junho de 2010 03:57
    terça-feira, 1 de junho de 2010 16:38
    Moderador
  •  Olá Enrique, tudo certo?! ( espero que sim )...

    Criei 3 tabelas aqui para reproduzir o teu exemplo...

    Segue o join utilizando lambda com 3 tabelas:

          var oQuery = oEntities.Contatoes.Join(oEntities.Empresas, 
                              c => c.CodigoEmpresa, 
                              e => e.Codigo, (c, e) => new { e, c }
                             ).Join(oEntities.TipoEmpresas, 
                                 e => e.e.CodigoTipoEmpresa, 
                                 t => t.Codigo, (e, t) => new {
                                                  Nome = e.c.Nome,
                                                  NomeEmpresa = e.e.Nome,
                                                  TipoEmpresa = t.Descricao
                                                });


    Abraço, Espero ter ajudado. Caso sim, marque-a como tal.
    sexta-feira, 4 de junho de 2010 03:57
  • Valeu Vinicius deu certo :)

    Henrique Fávaro Tâmbalo - Se a resposta ajudou, marque como resposta!
    terça-feira, 15 de junho de 2010 12:44