none
Linq problema com join e group by / order by RRS feed

  • Pergunta

  • Olá tenho a seguinte query em LINQ  to SQL:

     var query = from p in persistencia.RequisicaoCompraItems
                            join s in persistencia.Suprimentos on p.SuprimentoID equals s.SuprimentoID into supI
                            group p by new {p.SuprimentoID, p.RequisicaoCompraItemID, p.RequisicaoCompraID } into x
                            from res in x
                            orderby x.Key.SuprimentoID
                            select new {res.SuprimentoID ,
                                        x.Key.RequisicaoCompraItemID };

    Eu preciso selecionar os campos do join feito em suprimentos , mas na clausula select new não tenho acesso aos dados do join.
    O que estou fazendo de errado?
    Já tentei fazer uma subquery dentro do select new como já fiz em outras querys , mas também não obtive sucesso.

    Obrigado!
    kaneda182
    terça-feira, 10 de novembro de 2009 21:10

Respostas

  • Resolvi o problema jogando os campos que precisava no group by, não sei se é a melhor formar , mas funcionou.
    Fica ai um exemplo de como usar group by, order by , case , join e sub-query.

       var query = from p in persistencia.RequisicaoCompraItems
                            join s in persistencia.Suprimentos on p.SuprimentoID equals s.SuprimentoID into supI
                            from supItems in supI
                            join r in persistencia.RequisicaoCompras on p.RequisicaoCompraID equals r.RequisicaoCompraID into reqI
                            from reqItem in reqI
                            group p by new {supItems.DescricaoInterna,
                                            p.SuprimentoID,
                                            p.RequisicaoCompraItemID,
                                            p.RequisicaoCompraID,
                                            reqItem.EmpresaID,
                                            reqItem.StatusRequisicao ,
                                            reqItem.FinanceiroEstruturaCustoID ,
                                            reqItem.DataSolicitacao,
                                            EmpresaNome = (from emp in persistencia.Empresas
                                                           where emp.EmpresaID == reqItem.EmpresaID
                                                           select emp.Nome).Single() ,
                                            EstruturaCusto = (from str in persistencia.FinanceiroEstruturaCustos
                                                              where str.FinanceiroEstruturaCustoID == reqItem.FinanceiroEstruturaCustoID
                                                              select str.Descricao).Single(),
                                             } into x
                            from res in x
                            orderby x.Key.SuprimentoID
                            select new {res.SuprimentoID ,
                                        x.Key.RequisicaoCompraItemID ,
                                        x.Key.DescricaoInterna ,
                                        x.Key.FinanceiroEstruturaCustoID ,
                                        x.Key.EmpresaID ,
                                        x.Key.RequisicaoCompraID,
                                        Status = (x.Key.StatusRequisicao == 0 ? "Cadastrado" :
                                                     x.Key.StatusRequisicao == 1 ? "Conferido" :
                                                     x.Key.StatusRequisicao == 2 ? "Liberado" :
                                                     x.Key.StatusRequisicao == 3 ? "Em cotação" :
                                                     x.Key.StatusRequisicao == 4 ? "Cotado" :
                                                     x.Key.StatusRequisicao == 5 ? "Compra liberada" :
                                                     x.Key.StatusRequisicao == 6 ? "Em compra" :
                                                     x.Key.StatusRequisicao == 7 ? "Compra efetuada" :
                                                     x.Key.StatusRequisicao == 8 ? "Entrega parcial" :
                                                     x.Key.StatusRequisicao == 8 ? "Entrega total" :
                                                     x.Key.StatusRequisicao == 10 ? "Cancelado" :
                                                     x.Key.StatusRequisicao == 11 ? "Suspenso" :
                                                     x.Key.StatusRequisicao == 12 ? "Compra não autorizada" : "Indeterminado"),
                            };
    kaneda182
    • Marcado como Resposta kaneda182 quarta-feira, 11 de novembro de 2009 14:19
    quarta-feira, 11 de novembro de 2009 14:19