using System.Collections.Generic;
public class Transaction{
public int Id { get; set;}
public decimal Amount { get; set;}
public static void Main()
var transactions = new Transaction [] {
new Transaction {Id = 1, Amount = 5.50m},
new Transaction {Id = 2, Amount = 4.10m},
new Transaction {Id = 3, Amount = 1.20m},
new Transaction {Id = 4, Amount = 1.05m},
new Transaction {Id = 5, Amount = 3.25m},
new Transaction {Id = 6, Amount = 1.25m},
new Transaction {Id = 7, Amount = 5.15m},
new Transaction {Id = 8, Amount = 8.15m},
new Transaction {Id = 9, Amount = 5.15m},
var grouped = ApplyGrouping(transactions);
foreach(var g in grouped)
Console.WriteLine("Total:" + g.Item1);
foreach(var t in g.Item2){
Console.WriteLine(" " +t.Amount);
Console.WriteLine("---------");
private static IEnumerable<Tuple<decimal, IEnumerable<Transaction>>> ApplyGrouping(IEnumerable<Transaction> transactions){
decimal runningTotal = 0m;
var grouped = new List<Transaction>();
foreach(var t in transactions){
runningTotal += t.Amount;
if (runningTotal <= threshold) continue;
yield return new Tuple<decimal, IEnumerable<Transaction>>(runningTotal, grouped);