Seleccionar elementos de una lista para lograr una suma
Tengo una lista de elementos que tiene valores numéricos y necesito lograr una suma usando estos elementos. Necesito tu ayuda para construir tal algoritmo. A continuación, hay una muestra que describe mi problema, escrita en C #:
int sum = 21;
List<Item> list = new List<Item>();
list.Add(new Item() { Id = Guid.NewGuid(), Value = 3 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 5 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 12 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 3 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 2 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 7 });
List<Item> result = // the items in the list that has the defined sum.
Nota: no tengo restricciones en cuanto al número de elementos en el resultado.