如何获取服务在指定历史时间点的有效价格?
解决方案
你的问题在于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; }
逻辑说明
- 过滤历史记录:通过
Where筛选出所有变更日期不晚于目标日期的记录,确保只考虑目标时间点之前生效的价格 - 处理无记录场景:如果没有符合条件的历史价格,返回
null表示无有效价格 - 获取最新有效价格:通过
MaxBy或OrderByDescending + FirstOrDefault,拿到历史记录中最后一次价格变更的条目,其价格就是目标时间点的有效价格
内容的提问来源于stack exchange,提问作者Mideks
相关产品推荐
相关产品推荐

