【问题标题】:LINQ - Iterate over a collection of dates and perform a calculationLINQ - 遍历日期集合并执行计算
【发布时间】:2014-09-07 22:55:36
【问题描述】:

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

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

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

【问题讨论】:

  • 不,这不是家庭作业。我知道如何计算两个日期之间的天数并乘以一个数字!我的问题是我不知道如何在我的集合上仅使用 LINQ 来表达这一点。更具体地说,它用于转换数据库索引结果的结果转换器,它在 RavenDB 服务器上运行。这些转换器必须使用 LINQ 进行编码。

标签: c# .net linq datetime lambda


【解决方案1】:

这样的……

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2014-10-22
    • 2023-03-22
    相关资源
    最近更新 更多