LINQ Group By with multiple fields in Key

1

How do I include IdCategoria in addition to the category name in the Console of the first FOREACH ?

        var lst = from p in BDProduto.produtos
                  join c in BDProduto.categorias
                  on p.IdCategoria equals c.IdCategoria
                  orderby p.Produto
                  group p by c.Categoria;

        foreach (var grupo in lst)
        {
            Console.WriteLine("Categoria: {0}, Itens: {1}", grupo.Key, grupo.Count());
            foreach (var prod in grupo)
            {
                Console.WriteLine("\t\tID: {0}, Produto: {1}", prod.IdProduto, prod.Produto);
            }
        }
    
asked by anonymous 04.09.2015 / 18:32

1 answer

4

There is not much secret:

    foreach (var grupo in lst)
    {
        Console.WriteLine("Categoria: {0}, Id da Categoria: {1}, Itens: {2}", grupo.Key.Categoria, grupo.Key.IdCategoria, grupo.Count());
        ...

Before, aggregate Produto for the whole object of Categoria :

var lst = from p in BDProduto.produtos
              join c in BDProduto.categorias
              on p.IdCategoria equals c.IdCategoria
              orderby p.Produto
              group p by c;

Or, using Extension Methods (requested by comment):

var lst = BDProduto.produtos
          .Join(BDProduto.categorias, 
              p => p.IdCategoria,
              c => c.IdCategoria,
              (p, c) => new { Produto = p, Categoria = c })
          .OrderBy(j => j.Produto.Produto)
          .GroupBy(j => j.Categoria);
    
04.09.2015 / 18:37