using System.Collections.Generic;
public static void Main()
var listaValores = new List<Dados>()
new Dados { Id = 1, Valor = 100.00M},
new Dados { Id = 2, Valor = 200.00M},
new Dados { Id = 3, Valor = 300.00M},
new Dados { Id = 4, Valor = 400.00M},
new Dados { Id = 5, Valor = 500.00M}
foreach (string s in OterCombinacoes(listaValores, soma, ""))
Console.WriteLine($"Somando os valores do id {s} totalizando os {soma}");
public static IEnumerable<string> OterCombinacoes(List<Dados> dados, decimal sum, string values)
for (int i = 0; i < dados.Count; i++)
decimal resto = sum - dados[i].Valor;
string vals = dados[i].Id + "," + values;
List<Dados> dadosPossiveis = dados.Take(i).Where(n => n.Valor <= sum).ToList();
if (dadosPossiveis.Count > 0)
foreach (string s in OterCombinacoes(dadosPossiveis, resto, vals))
public int Id { get; set; }
public decimal Valor { get; set; }