1

我想从我的数据库中获取最终用于填充日历的日期列表。每个“日历事件”都有一个开始日期和结束日期,我需要获取所有日期之间的所有日期,包括开始日期和结束日期。

我被困在 WHERE 语句上,因为我不知道该用什么

public List<EventFeed> GetCalendarDates()
    {

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

更新

需要明确的是,如果我有一个名为 foobar 的日历事件,该事件从 2010 年 8 月 22 日开始到 2010 年 8 月 24 日结束,那么我希望我的列表返回:

2010 年 8 月 22 日、2010 年 8 月 23 日、2010 年 8 月 24 日

谢谢知识库

4

2 回答 2

2

我最近不得不做类似的事情,我使用 aFunc<>从范围中提取日期并在 linq 查询中使用结果。

我在Func下面的 Linq 查询中添加了相同的内容。您没有指定返回的对象的名称,GetEventsList()因此只需将EventItemFunc<> 中第一个类型参数的类型替换为您需要的任何类型。

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();
}
于 2010-08-04T13:30:18.417 回答
0

您的意思是您要选择在开始日期或之后开始并在结束日期或之前结束的所有事件!

如果是,那么这将有所帮助

var query = from @event in events
                        where @event.Start.Date >= startDate.Date
                              && @event.End.Date <= endDate.Date
                        select @event;
于 2010-08-04T11:10:35.900 回答