public DateTime Date { get; set; }
public decimal Amount { get; set; }
public decimal Balance { get; set; }
public string Memo { get; set; }
public decimal? Min { get; set; }
public decimal? Max { get; set; }
public decimal Rate { get; set; }
public static void Main()
new RateRange { Min = null, Max = 1000, Rate = 0.1m },
new RateRange { Min = 1001, Max = 2000, Rate = 0.2m },
new RateRange { Min = 2001, Max = 4000, Rate = 0.3m },
new RateRange { Min = 4001, Max = 10000, Rate = 0.4m },
new RateRange { Min = 10001, Max = null, Rate = 0.4m },
new Row { Date = new DateTime(2023,1,1), Amount = 1200, Balance = 1200, Memo = "Transaction 1" },
new Row { Date = new DateTime(2023,1,15), Amount = 3200, Balance = 4400, Memo = "Transaction 2" },
new Row { Date = new DateTime(2023,2,1), Amount = -1200, Balance = 3200, Memo = "Transaction 3" },
new Row { Date = new DateTime(2023,2,15), Amount = 5000, Balance = 8200, Memo = "Transaction 4" },
new Row { Date = new DateTime(2023,2,1), Amount = 4000, Balance = 12200, Memo = "Transaction 5" },
new Row { Date = new DateTime(2023,2,15), Amount = 5000, Balance = 17200, Memo = "Transaction 6" },
var rows = from currentRow in entries
let nextRow = entries.Where(e => e.Date > currentRow.Date).OrderBy(e => e.Date).FirstOrDefault()
Amount = currentRow.Amount,
Balance = currentRow.Balance,
NextDate = nextRow == null ? (DateTime?)null : nextRow.Date
foreach (var r in rows) {
Console.WriteLine($"{r.Date:dd/MM/yyyy} - {r.Balance:c0} - {((r.NextDate ?? DateTime.Today) - r.Date).TotalDays} days");