Catch all the fields of a class using Lambda + Group By

1

I have a list:

produtosCompletos = (from f in estoques
                     join p in produtos on f.idProduto equals p.id
                     join c in classes on f.idClasse equals c.id
                     select new produtoCompleto()
                     {
                         idUnidade = f.idUnidade,
                         descricao = p.descricao,
                         classe = c.descricao,
                         lote = f.lote,
                         dtValidade = f.dtValidade,
                         quant = f.quant
                     }).ToList();

With this list, I want to add the quant value grouped by the description. I'm doing this:

        var result =
            (from p in produtosCompletos
            group p by p.descricao
            into g
            select new produtoCompleto()
            {
                idUnidade = //não sei como mostrar aqui :/
                descricao = g.Key,
                quant = g.Sum(x => x.quant)
            }).ToList();

As you can see above, I can only get the descricao and the quant , the other fields I do not know how to get

    
asked by anonymous 24.04.2017 / 03:51

2 answers

1

You need to get the first item in the group and get the id.

var result =
            (from p in produtosCompletos
             group p by p.descricao
            into g
             select new produtoCompleto()
             {
                 idUnidade = g.First().idUnidade,
                 descricao = g.Key,
                 quant = g.Sum(x => x.quant)
             }).ToList();
    
24.04.2017 / 03:58
5

To make a group by with several fields in linq, you need to declare all the fields in your clause, from group by , would look like this:

 var result =
            (from p in produtosCompletos
            group p by new {p.descricao, p.idUnidade }
            into g
            select new produtoCompleto()
            {
                idUnidade = g.Key.idUnidade 
                descricao = g.Key.descricao,
                quant = g.Sum(x => x.quant)
            }).ToList();

You can access your variables later through Key

    
24.04.2017 / 04:01