You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取服务在指定历史时间点的有效价格?

解决方案

你的问题在于MinBy会选取离目标日期最近的记录,不管该记录是历史还是未来的,这不符合"获取指定时间点有效价格"的需求——有效价格应该是目标日期及之前最后一次变更的价格。

下面是修正后的实现:

方法一(.NET 6+ 可用,支持MaxBy)

public int? GetPriceAtDate(DateTime date)
{
    // 只保留目标日期及之前的价格变更记录
    var validPrices = ServicePrices.Where(sp => sp.ChangeDate <= date);
    
    // 无有效历史记录时返回null
    if (!validPrices.Any())
        return null;
    
    // 选取最后一次变更的价格记录
    return validPrices.MaxBy(sp => sp.ChangeDate).Price;
}

方法二(兼容旧版.NET,无MaxBy时使用)

public int? GetPriceAtDate(DateTime date)
{
    var latestValidPrice = ServicePrices
        .Where(sp => sp.ChangeDate <= date)
        .OrderByDescending(sp => sp.ChangeDate)
        .FirstOrDefault();
    
    // 空记录时返回null,否则返回对应价格
    return latestValidPrice?.Price;
}

逻辑说明

  1. 过滤历史记录:通过Where筛选出所有变更日期不晚于目标日期的记录,确保只考虑目标时间点之前生效的价格
  2. 处理无记录场景:如果没有符合条件的历史价格,返回null表示无有效价格
  3. 获取最新有效价格:通过MaxBy或OrderByDescending + FirstOrDefault,拿到历史记录中最后一次价格变更的条目,其价格就是目标时间点的有效价格

内容的提问来源于stack exchange,提问作者Mideks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:31:02