How to use Subqueries with LINQ Entity Framework?

Asked

Viewed 130 times

1

I need to write the following query in the Linq Entity Framework. I’m having difficulty in the subquery part, where I need to accumulate the quantity field.

SELECT ppc.[PedidoCompraId]
  ,ppc.[EAN]
  ,ppc.[Preco]
  ,ppc.[Quantidade]
  ,ppc.[UnidadeId]
  ,pa.Preco as PrecoCompra
  ,SUM(pa.Quantidade)  as QtdCompra
  ,qtd.Quantidade as QtdAcumulada
FROM [OrienteWebTeste].[dbo].[ProdutosPedidoCompra] as ppc
left join [OrienteWebTeste].[dbo].[ProdutosApuracao] pa 
on ppc.PedidoCompraId = pa.PedidoCompraId 
and ppc.EAN = pa.EAN
and ppc.UnidadeId = pa.UnidadeId
left join (select pedidoCompraId, EAN, sum(quantidade) Quantidade 
           from [OrienteWebTeste].[dbo].[ProdutosApuracao] 
           group by EAN, pedidoCompraId)as qtd
on pa.EAN = qtd.EAN
and  pa.PedidoCompraId = qtd.PedidoCompraId

group By ppc.[PedidoCompraId]
,ppc.[EAN]
,ppc.[Preco]
,ppc.[Quantidade]
,ppc.[UnidadeId]
,pa.Preco 
,qtd.Quantidade 
 order by ppc.[EAN]

This is my code where I get all this information except the accumulated amount.

        var produtos = _dbOrienteWeb.Vw_Produtos.ToArray();
        var produtosApurados = (from pr in produtos.ToList()
                                join ppc in _db.ProdutosPedidoCompra
                                on pr.BarrasId equals ppc.EAN
                                join pa in _db.ProdutosApuracao
                                on new { ppc.PedidoCompraId, ppc.UnidadeId, ppc.EAN }
                                equals new { pa.PedidoCompraId, pa.UnidadeId, pa.EAN } into joinedT
                                from pa in joinedT.DefaultIfEmpty()
                                group pa
                                by new
                                {
                                    ppc.PedidoCompraId,
                                    ppc.EAN,
                                    ppc.Preco,
                                    ppc.Quantidade,
                                    ppc.UnidadeId,
                                    ppc.Unidade,
                                    pr.descricao,
                                    PrecoCompra = (pa == null ? 0 : pa.Preco),
                                    Validade = (pa == null ? null : pa.Validade),
                                    QuantidadeCompra = (pa == null ? 0 : pa.Quantidade),

                                } into g
                                where g.Key.PedidoCompraId == pedidoCompraId
                                where g.Key.UnidadeId == unidadeId
                                orderby g.Key.descricao
                                select new ProdutoApuradoView
                                {
                                    PedidoCompraId = g.Key.PedidoCompraId,
                                    EAN = g.Key.EAN,
                                    QuantidadePedido = g.Key.Quantidade,
                                    QuantidadeCompra = g.Sum(gg => gg?.Quantidade ?? 0),
                                    QuantidadeDiferenca = g.Key.Quantidade - g.Sum(gg => gg?.Quantidade ?? 0),
                                    PrecoPedido = g.Key.Preco,
                                    PrecoCompra = g.Key?.PrecoCompra,
                                    UnidadeId = g.Key.UnidadeId,
                                    Unidade = g.Key.Unidade,
                                    Produto = g.Key.descricao,
                                    Validade = g.Key?.Validade

                                }).ToList();

Can you give me a light? Hugs.

  • The accumulated quantity should be in the right "g.Key.Quantity"?

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.