Цикл даты и времени от Linq to Object - PullRequest
3 голосов
/ 18 января 2011

Я хочу сделать это, используя LINQ to Object

    List<DateTime> allDays = new List<DateTime>(); 
    DateTime start = new DateTime(2010, 1, 1);
    DateTime maxDate = new DateTime(2010, 1, 11);
    do
    {
        allDays.Add(start);
        start = start.AddDays(1);
    }
    while (maxDate.Date >= start);

Спасибо.

1 Ответ

4 голосов
/ 18 января 2011

Вы можете сделать метод расширения следующим образом:

    public static IEnumerable<DateTime> DaysUpTo(this DateTime startDate, DateTime endDate)
    {
        DateTime currentDate = startDate;
        while (currentDate <= endDate)
        {
            yield return currentDate;
            currentDate = currentDate.AddDays(1);
        }
    }

Затем вы можете использовать его так:

        DateTime Today = DateTime.Now;
        DateTime NextWeek = DateTime.Now.AddDays(7);

        var weekDays = Today.DaysUpTo(NextWeek).ToList();

Или с примером, который вы использовали:

DateTime start = new DateTime(2010, 1, 1);
DateTime maxDate = new DateTime(2010, 1, 11);
List<DateTime> allDays = start.DaysUpTo(maxDate).ToList();

Редактировать:

Если вы действительно хотите реализацию LINQ, это также будет работать:

DateTime start = new DateTime(2010, 1, 1);
DateTime maxDate = new DateTime(2010, 1, 11);

List<DateTime> allDays  = Enumerable
                          .Range(0, 1 +(maxDate - start).Days)
                          .Select( d=> start.AddDays(d))
                          .ToList();
...