fork download
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using static System.Console;
  4.  
  5. namespace ConsoleApplication10 {
  6. public class Program {
  7. public static void Main(string[] args) {
  8. List<Teste> lstTeste = new List<Teste> {
  9. new Teste {Codigo = 1, Quantidade = 10},
  10. new Teste {Codigo = 2, Quantidade = 10},
  11. new Teste {Codigo = 1, Quantidade = 10},
  12. new Teste {Codigo = 3, Quantidade = 10},
  13. new Teste {Codigo = 2, Quantidade = 10}
  14. };
  15.  
  16. //Forma declarativa
  17. WriteLine("Forma declarativa");
  18. var items = from item in lstTeste
  19. group item by item.Codigo
  20. into g
  21. select new { Codigo = g.Key, Quantidade = g.Sum(item => item.Quantidade) };
  22. items.ToList().ForEach(item => { WriteLine($"Item: {item.Codigo} Quantidade: {item.Quantidade}"); });
  23. //forma imperativa
  24. WriteLine("Forma imperativa");
  25. var lista = lstTeste.GroupBy(g => g.Codigo).Select(g => new {
  26. Codigo = g.First().Codigo, Quantidade = g.Sum(h => h.Quantidade) });
  27. lista.ToList().ForEach(item => { WriteLine($"Item: {item.Codigo} Quantidade: {item.Quantidade}"); });
  28. //forma com dicionário - Sem LINQ
  29. WriteLine("Forma com dicionário");
  30. var dicionario = new Dictionary<int, Teste>();
  31. foreach (var item in lstTeste) {
  32. if (dicionario.ContainsKey(item.Codigo)) dicionario[item.Codigo].Quantidade += item.Quantidade;
  33. else dicionario[item.Codigo] = item;
  34. }
  35. foreach (var item in dicionario.Values) WriteLine($"Item: {item.Codigo} Quantidade: {item.Quantidade}");
  36. }
  37. }
  38.  
  39. public class Teste {
  40. public int Codigo { get; set; }
  41. public int Quantidade { get; set; }
  42. }
  43. }
  44.  
  45. //https://pt.stackoverflow.com/q/88384/101
Success #stdin #stdout 0.03s 18172KB
stdin
Standard input is empty
stdout
Forma declarativa
Item: 1 Quantidade: 20
Item: 2 Quantidade: 20
Item: 3 Quantidade: 10
Forma imperativa
Item: 1 Quantidade: 20
Item: 2 Quantidade: 20
Item: 3 Quantidade: 10
Forma com dicionário
Item: 1 Quantidade: 20
Item: 2 Quantidade: 20
Item: 3 Quantidade: 10