2011-01-17 1 views
3

Я хочу сделать это с помощью LINQ к объектуДата Время цикла с помощью Linq к объекту

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); 

Спасибо.

+0

Что «с помощью SQL в объект» означает? LINQ to SQL? – Ani

+0

Упс ... извините. Это моя ошибка –

ответ

4

Вы могли бы сделать метод расширения, как это:

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(); 
+0

Спасибо. Вы вариант хороший, но я хотел бы увидеть LINQ для реализации Object. –

+1

Добавлена ​​реализация LINQ, которую не так легко понять, хотя imo – BrokenGlass

Смежные вопросы