我有一个具有DateTime和decimal属性的对象的集合。集合中的所有日期都是唯一的,并按顺序排序。
public class RateChange
{
public DateTime EffectiveDate { get; set; }
public decimal Rate { get; set; }
}
假设第一个费率更改是开始日期,结束日期是当前DateTime.UtcNow。我如何迭代这个集合并乘以每个日期之间的Rate * Days,然后仅使用LINQ将这些结果的总和相加。
答案 0 :(得分:2)
像这样......
rateChanges
.Zip(rateChanges
.Skip(1)
.Concat(new[]{
new RateChange{
EffectiveDate = DateTime.Now.Date,
Rate = 0M //we never use this
}
}),
(r1, r2) => r1.Rate * (r2 - r1).TotalDays)
.Sum();
由于rateChanges的双重迭代,最好确保它是物化集合,例如数组或List<RateChange>