2010-08-04 103 views
1

我打算從我的數據庫中獲取最終將用於填充日曆的日期列表。每個'日曆事件'的開始日期爲&結束日期,我需要獲取&之間的所有日期,包括開始日期&。C#linq之間的日期

我粘在WHERE語句我,因爲我不知道該用什麼這個

public List<EventFeed> GetCalendarDates() 
    { 

     return (from eventsList in GetEventsList()  
       select new EventFeed() 
         { 
          //EventDate = todo 
         }).ToList(); 
    } 

UPDATE

僅僅是明確的,如果我有一個日曆事件叫做foobar的這開始於上24/08/2010 22/08/2010和結束,然後我想我的列表返回:

22/08/2010, 23/08/2010, 24/08/2010

謝謝 kb

回答

2

我不得不做類似的事情最近,我用了一個Func<>來提取範圍的日期,並在LINQ查詢使用的結果。

我在下面的Linq查詢中添加了相同的Func。您沒有指定由GetEventsList()返回的對象的名稱,因此只需使用您需要的任何類型替換Func <>中的第一個類型參數的EventItem類型。

public static List<EventFeed> GetCalendarDates() 
{ 
    Func<EventItem, List<DateTime>> extractEventDates = eventItem => 
                  { 
                   var dates = new List<DateTime>(); 
                   for (var date = eventItem.StartDate; 
                    date <= eventItem.EndDate; 
                    date = date.AddDays(1)) 
                   { 
                    dates.Add(date); 
                   } 
                   return dates; 
                  }; 

    return (from eventItem in GetEventsList() 
      from eventDate in extractEventDates(eventItem) 
      select new EventFeed 
         { 
          EventDate = eventDate 
         }).ToList(); 
} 
+0

謝謝fletcher,我想出了一些類似的東西,但是您的解決方案更少代碼,謝謝kb – 2010-08-04 15:49:09

0

你的意思是你想選擇開始日期或之後開始的所有事件,並且在結束日期或之前結束!

如果是的話,那麼這將有助於

var query = from @event in events 
         where @event.Start.Date >= startDate.Date 
           && @event.End.Date <= endDate.Date 
         select @event; 
+0

嗨,mho,感謝您的回覆,但是這是從哪裏來的? @ event.Start.Date – 2010-08-04 11:24:11

+0

嗨mho,我已經更新了我的文章... – 2010-08-04 11:34:07