none
LINQ com inner join e group by RRS feed

  • Pergunta

  • Bom dia

    Tenho a seguinte situação:


    Table MAP
    ORC Ref Tipo
    12 x_C1 A
    12 x_C2 A
    12 y_C1 A
    12 z_C1 B
    13 x_C1 A
    13 x_C2 A

    Table MO
    ORC Ref dim QT
    12 x_C1 120 1
    12 x_C1 130 5
    12 x_C2 121 3
    12 y_C1 100 1
    12 y_C1 120 2
    12 z_C1 10 1

    Tabble BS
    Ref REFB
    x_C1 X
    x_C2 X
    y_C1 Y
    z_C1 Z

    Pretendo fazer em LINQ uma instrução para fazer o inner join com group by para Orc == 12.

    O resultado pretendido é:

    ORC Ref Tipo dim QT REFB
    x_C1
    12 X_C1 A 120 1 X
    12 X_C1 A 130 5 X
    x_C2
    12 x_C2 A 121 3 X
    Y_C1
    12 Y_C1 A 100 1 Y
    12 Y_C1 A 120 2 Y
    z_C1
    12 z_C1 B 10 1 Z

    Alguém me pode ajudar?

    Muito obrigado

    sexta-feira, 24 de outubro de 2014 10:02

Todas as Respostas

  • Veja se algum desses artigos te ajuda, creio que o primeiro já soluciona o seu problema:

    1 - http://stackoverflow.com/questions/19395849/linq-group-by-on-multiple-table-and-inner-join
    2 - http://stackoverflow.com/questions/530925/linq-using-inner-join-group-and-sum

    Se te ajudou marca como resposta

    • Sugerido como Resposta Mr. GMSOFT sexta-feira, 24 de outubro de 2014 11:45
    sexta-feira, 24 de outubro de 2014 11:45
  • Olá Cafa,

     o join é fácil, veja um exemplo com tres tabelas e agrupadas, lembrando que o nome aqui será T1,T2,T3 :

    var join = db.T1
                                      .Join(db.T2,
                                            t1 => t1.ID,
                                            t2 => t2.ID,
                                            (t1, t2) => new { t1, t2 })
                                      .Join(db.T3,
                                            t1t2 => t1t2.t2.ID,
                                            t3 => t3.ID,
                                            (t1t2, t3) => new { t1t2, t3 })
                                      .Where(i => i.t3.ID == 12)
                                      .GroupBy(i => new
                                               {
                                                   //todos seus campos do select
                                                   IDT1 = i.t1t2.t1.ID,
                                                   IDT2 = i.t1t2.t2.ID,
                                                   IDT3 = i.t3.ID
                                               })
                                      .Select(s => new
                                               {
                                                   //seu select agrupado
                                                   IDT1 = s.Key.IDT1,
                                                   IDT2 = s.Key.IDT2,
                                                   IDT3 = s.Key.IDT3
                                               })
                                      .ToList();
     Tente entender a estrutura só assim vai conseguir montar esse select, mas se não entender basta alterar os campos que vai funcionar...

    sexta-feira, 24 de outubro de 2014 11:56
  • Para consulta, segue sugestão:

    var innerGroupJoinQuery = from category in categories join prod in products on category.ID equals prod.CategoryID into prodGroup selectnew { CategoryName = category.Name, Products = prodGroup };

    http://msdn.microsoft.com/pt-br/library/bb311040.aspx

    Melhor referência de Exemplos de LINQ. 101 exemplos testados:

    https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

    Outras dúvidas:

    http://stackoverflow.com/questions/5307731/linq-to-sql-multiple-joins-on-multiple-columns-is-this-possible

    • Sugerido como Resposta Deric Ferreira sexta-feira, 24 de outubro de 2014 11:56
    sexta-feira, 24 de outubro de 2014 11:56
  • Caso tenha conseguido a solução finalize sua Thread marcando a resposta

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    domingo, 28 de junho de 2015 15:12