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 amount accumulated.
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.