C#如何使用LINQ计算DateTime列表相邻日期的平均间隔天数
可以通过LINQ实现该需求,无需手动编写遍历逻辑,具体实现方案如下:
实现思路
利用LINQ的Zip方法配对相邻日期,计算间隔后直接求平均值,全程不需要手动写for/foreach循环。
完整代码示例
// 你的已排序日期列表 List<DateTime> sortedDates = new List<DateTime> { new DateTime(2022,1,1), new DateTime(2022,1,2), new DateTime(2022,1,4) }; // 计算平均间隔天数 double averageInterval = sortedDates.Count < 2 ? 0 // 元素不足2个时无相邻间隔,可根据业务需求调整返回值 : sortedDates.Zip(sortedDates.Skip(1), (prev, curr) => (curr - prev).TotalDays) .Average();
代码说明
- 边界处理:首先判断列表长度,当列表元素少于2个时不存在相邻间隔,可根据业务需求返回0、null或抛出异常,示例中默认返回0
- 相邻配对:
sortedDates.Skip(1)会生成跳过第一个元素的新日期序列,和原序列通过Zip配对后,刚好得到「前一个日期、后一个日期」的相邻组合 - 间隔计算:每对相邻日期的差值取
TotalDays得到间隔天数的序列,直接调用Average()方法即可得到平均间隔天数
验证结果
用你给出的示例测试,最终得到的averageInterval值为1.5,和预期计算结果完全一致。
注意事项
该实现默认你的List<DateTime>已经按时间顺序完成排序,若列表未排序会导致计算结果错误,和手动遍历的前置要求一致。
内容的提问来源于stack exchange,提问作者Steve Kennedy
相关产品推荐
相关产品推荐

