LINQ表达式生成两个日期之间的天数列表

本文关键字:之间 日期 列表 数列 两个 表达式 LINQ | 更新日期: 2023-09-27 18:04:42

我有一个开始和结束日期,我想得到这两个日期之间的所有日子的列表(包括)。我可以用一个循环来做到这一点,它向开始日期添加1天,然后将该日期添加到列表中。例如:

DateTime end = DateTime.Now;
DateTime start = end.AddDays(-30);
DateTime current = start;
List<DateTime> result = new List<DateTime>();
while (currrent <= end)
{
    result.Add(current);
    current = current.AddDays(1);
}

我正在寻找一个整洁的LINQ表达式代替。什么好主意吗?

LINQ表达式生成两个日期之间的天数列表

Enumerable.Range将是一个选项:

var rightNow = DateTime.Now;
var result = Enumerable.Range(1, 30).Select(d => rightNow.AddDays(d)).ToList()

如果您知道开始和结束,只需使用迭代器块编写方法来完成此操作就很简单了:

public static IEnumerable<DateTime> DateRange(DateTime startInclusive, DateTime endInclusive)
{
    for (var current = startInclusive; current <= endInclusive; current = current.AddDays(1))
    {
        yield return current;
    }
}

如果你知道天数,那么科里的答案是正确的。

我上面的方法也可以重载为迭代之间的"步骤"取一个TimeSpan