Subquery with entityframework lambda

Asked

Viewed 147 times

1

I have this select which on the basis of it was made in the entity framework

select PedidoVenda.Id, Funcionarios.Nome,
FaturaContasReceber.FaturaContasReceberPId, FaturaContasReceberP.TotalFatura,
 (SELECT SUM(Total) FROM PedidoVendaProdutos
      WHERE PedidoVendaProdutos.PedidoVendaID = 1) AS toTAL
from PedidoVendaProdutos
inner join PedidoVenda on PedidoVenda.Id = PedidoVendaProdutos.PedidoVendaID
inner join FaturaContasReceberP on FaturaContasReceberP.PedidoVendaId = PedidoVenda.Id
inner join FaturaContasReceber on FaturaContasReceber.FaturaContasReceberPId = FaturaContasReceberP.Id
inner join Produtos on Produtos.Id = PedidoVendaProdutos.ProdutoID
inner join Funcionarios on Funcionarios.Id = PedidoVenda.VendedorID
where PedidoVenda.Id = 1 and FaturaContasReceberP.Id = FaturaContasReceber.FaturaContasReceberPId
group by PedidoVenda.Id, Funcionarios.Nome, FaturaContasReceber.FaturaContasReceberPId, FaturaContasReceberP.TotalFatura
, PedidoVendaProdutos.PedidoVendaID

But what has been done does not have the subquery:

Is this way:

var fatura = db.PedidoVendaProdutos.Include(a => a.PedidoVenda).Include(a => a.PedidoVenda.Empresa).Include(a => a.PedidoVenda.Vendedor).Include(a => a.Produto)
            .Join(db.FaturaContasReceberP, p => p.PedidoVendaID, f => f.PedidoVendaId, (p, f) => new { PedidoVendaProdutos = p, FaturaContasReceberP = f })
            .Join(db.FaturaContasReceber, f => f.FaturaContasReceberP.Id, ft => ft.FaturaContasReceberPId, (f, ft) => new { FaturaContasReceberP = f, FaturaContasReceber = ft })
            .Where(a => (a.FaturaContasReceber.Data >= periodoInicial && a.FaturaContasReceber.Data <= periodoFinal)
            && (empresa != 0 ? a.FaturaContasReceberP.FaturaContasReceberP.PedidoVenda.EmpresaID == empresa : a.FaturaContasReceberP.FaturaContasReceberP.PedidoVenda.EmpresaID != 0)
            && (produto != 0 ? a.FaturaContasReceberP.PedidoVendaProdutos.ProdutoID == produto : a.FaturaContasReceberP.PedidoVendaProdutos.ProdutoID != 0)
            && (a.FaturaContasReceber.Cancelado == false && todos == false ? a.FaturaContasReceber.Quitado == quitado : a.FaturaContasReceber.Quitado == true || a.FaturaContasReceber.Quitado == false)
            && (a.FaturaContasReceber.FaturaContasReceberPId == a.FaturaContasReceberP.FaturaContasReceberP.Id)
            ).GroupBy(a => new
            {
                a.FaturaContasReceberP.PedidoVendaProdutos.ProdutoID,
                a.FaturaContasReceberP.FaturaContasReceberP.PedidoVenda.Vendedor.Nome,
                a.FaturaContasReceberP.FaturaContasReceberP.PedidoVendaId,
                a.FaturaContasReceberP.PedidoVendaProdutos.Total,
                a.FaturaContasReceberP.PedidoVendaProdutos.Produto.nome,
                a.FaturaContasReceberP.PedidoVendaProdutos.Produto.Comissao,
                a.FaturaContasReceber.FaturaContasReceberPId,
                a.FaturaContasReceberP.FaturaContasReceberP.TotalFatura,

            })
            .Select(a => new
            {
                a.Key.PedidoVendaId,
                TotalPago = a.Sum(b => b.FaturaContasReceber.Total),
                Nome = a.Key.Nome,
                Total = a.Key.Total,
                Comissao = a.Key.Comissao,
                Produto = a.Key.nome,
                TotalFatura = a.Key.TotalFatura,//a.Sum(b => b.FaturaContasReceber.Valor),
                Porcentagem = (a.Key.Total * 100) / a.Key.TotalFatura,
                ValorRecebido = (a.Sum(b => b.FaturaContasReceber.Total) * ((a.Key.Total * 100) / a.Key.TotalFatura)) / 100
            })
            .OrderBy(a => a.PedidoVendaId)
            .ToList();

And I need to include this subquery

 (SELECT SUM(Total) FROM PedidoVendaProdutos
      WHERE PedidoVendaProdutos.PedidoVendaID = 1) 

How can I include lambda? If anyone has any example, explanation. Thank you.

1 answer

2


See if it works Sum in his select. I created the property TotalVendaPedidos. I did a test here with a list of objects and it worked.

  .Select(a => new
        {
            a.Key.PedidoVendaId,
            TotalPago = a.Sum(b => b.FaturaContasReceber.Total),
            Nome = a.Key.Nome,
            Total = a.Key.Total,
            Comissao = a.Key.Comissao,
            Produto = a.Key.nome,
            TotalFatura = a.Key.TotalFatura,//a.Sum(b => b.FaturaContasReceber.Valor),
            Porcentagem = (a.Key.Total * 100) / a.Key.TotalFatura,
            ValorRecebido = (a.Sum(b => b.FaturaContasReceber.Total) * ((a.Key.Total * 100) / a.Key.TotalFatura)) / 100,
           TotalVendaPedidos = PedidoVendaProdutos.Where(p => p.PedidoVendaID = 1).Sum(p => p.Total)
        })

I found this way to do the Sum here

  • Thank you very much, that’s just what I needed.

  • Not at all. I’m glad it worked out!

Browser other questions tagged

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