SQL query for Linq mvc4 c #

2

I'm not very familiar with Linq and I'm having trouble turning this SQL query into linq, can anyone help me.

I do join of 6 tables (I did not do the database. I have to work with it), what I'm hooked on is group by and having

select processosProduto.PRODUTO,SUM(pedidosVenda1.QUANT) as vendidos ,processosProduto.QUANT as estoque, processoFinanceiro.CODIGO, processoFinanceiro.ProdutosContidos
from processoFinanceiro 
join processosProduto on processoFinanceiro.CODIGO = processosProduto.CODIGO
join OrdemDeCompra on processosProduto.PRODUTO = OrdemDeCompra.Codigo
join produtos on OrdemDeCompra.PARALELO = produtos.CODIGO
join pedidosVenda1 on produtos.CODIGO = pedidosVenda1.PRODUTO
join pedidosVenda on pedidosVenda1.CODIGO = pedidosVenda.CODIGO
where pedidosVenda.NPedido = processoFinanceiro.NPedidoFornecedor 
group by processosProduto.PRODUTO,processosProduto.QUANT,  processoFinanceiro.CODIGO, processoFinanceiro.ProdutosContidos
having SUM(pedidosVenda1.QUANT) < processosProduto.QUANT*120/100

EDITED

Here's what I've been able to do so far

var listaDb = (from pf in db.processoFinanceiro
                           join pp in db.processosProduto on pf.CODIGO equals pp.CODIGO
                           join oc in db.OrdemDeCompras on pp.PRODUTO equals oc.PARALELO
                           join pr in db.produtos on oc.PARALELO equals pr.CODIGO
                           join pv1 in db.pedidosVenda1 on pr.CODIGO equals pv1.PRODUTO
                           join pv in db.pedidosVenda on pv1.CODIGO equals pv.CODIGO
                           where pv.NPedido == pf.NPedidoFornecedor

But I'm not able to develop more than this point, as I said what I'm hooked on is group by and having

    
asked by anonymous 18.11.2016 / 12:29

2 answers

1

Without the model to make a test a little difficult, but see how group by and having would work in linq.

Nearly having becomes where after group by .

var listaDb = (from pf in db.processoFinanceiro
               join pp in db.processosProduto on pf.CODIGO equals pp.CODIGO
               join oc in db.OrdemDeCompras on pp.PRODUTO equals oc.PARALELO
               join pr in db.produtos on oc.PARALELO equals pr.CODIGO
               join pv1 in db.pedidosVenda1 on pr.CODIGO equals pv1.PRODUTO
               join pv in db.pedidosVenda on pv1.CODIGO equals pv.CODIGO
               where pv.NPedido == pf.NPedidoFornecedor
               group pv by new { pp.PRODUTO, pf.CODIGO, pf.ProdutosContidos } into g
               where g.Sum(pp => pp.QUANT) < (g.Sum(pp => pp.QUANT) *120/100)
               select new 
               { 
                    PRODUTO = g.Key.PRODUTO, 
                    CODIGO = g.Key.CODIGO, 
                    ProdutosContidos = g.Key.ProdutosContidos,
                    QUANT = g.Sum(pp => pp.QUANT) 
                });
    
18.11.2016 / 15:12
2

I've done it here. It should look something like this:

(from pf in processoFinanceiro
            join pp in processosProduto on pf.CODIGO equals pp.CODIGO
            join oc in OrdemDeCompras on pp.PRODUTO equals oc.PARALELO
            join pr in produtos on oc.PARALELO equals pr.CODIGO
            join pv1 in pedidosVenda1 on pr.CODIGO equals pv1.PRODUTO
            join pv in pedidosVenda on pv1.CODIGO equals pv.CODIGO
            group new {pp.PRODUTO, pp.QUANT, pvQUANT = pv1.QUANT, pf.CODIGO, pf.ProdutosContidos}
            by new {pp.PRODUTO, pp.QUANT, pf.CODIGO, pf.ProdutosContidos}
            into grp               
            select new
            {
                grp.Key.PRODUTO,
                vendidos = grp.Sum(b=>b.pvQUANT),
                estoque = grp.Key.QUANT,
                grp.Key.CODIGO,
                grp.Key.ProdutosContidos
            });

no Group new {....} you put the properties you are going to use to return and in by new {...} you put the properties you want to group

ex: If you want to do SUM, you can not put this property in by and will only group the properties that are the same.

REFERENCE

    
18.11.2016 / 14:54