Linq запрос на выбор элемента массива по достижению опереденной суммы значений предыдущих элементов
Есть массив с предстоящими платежами(например):
List<Payment> payments = new List<Payment>();
payments.Add(new Payment() { Date = "2020-01-01", Sum = 100 });
payments.Add(new Payment() { Date = "2020-02-01", Sum = 200 });
payments.Add(new Payment() { Date = "2020-03-01", Sum = 300 });
payments.Add(new Payment() { Date = "2020-04-01", Sum = 400 });
payments.Add(new Payment() { Date = "2020-05-01", Sum = 500 });
И есть сумма уже внесенных в кассу денег.
double TotalPayments = 600.00;
Как получить на выходе объект с данными следующего платежа?
var NextPayment = ?
Console.WriteLine(NextPayment.Date); // 2020-04-01
Console.WriteLine(NextPayment.Sum); // 400
Подскажите, пожалуйста, каким образом посредством linq можно реализовать подобный выбор?
Спасибо!
Ответы (1 шт):
Автор решения: Neomaster
→ Ссылка
Нужно использовать накопитель и пропускать элементы пока он не примет определенное значение, а после того как примет – взять только следующий элемент.
int TotalPayments = 600;
int counter = 0;
var nextPayment = payments
.SkipWhile(x =>
{
counter += x.Sum;
return counter <= TotalPayments;
})
.Take(1)
.First();
Console.WriteLine(nextPayment.Date); // 2020-04-01
Console.WriteLine(nextPayment.Sum); // 400