2010-08-04 79 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