LINQ - 迭代一组日期并执行计算

时间:2014-09-07 22:55:37

标签: c# .net linq datetime lambda

我有一个具有DateTime和decimal属性的对象的集合。集合中的所有日期都是唯一的,并按顺序排序。

public class RateChange
{
    public DateTime EffectiveDate { get; set; }
    public decimal Rate { get; set; }
}

假设第一个费率更改是开始日期,结束日期是当前DateTime.UtcNow。我如何迭代这个集合并乘以每个日期之间的Rate * Days,然后仅使用LINQ将这些结果的总和相加。

1 个答案:

答案 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>