我有一个电影租赁应用程序。该公司将输入电影租赁日期和电影租赁结束日期。日期可以重叠(因为您可以拥有许多客户)。在DB中的数据,当用户选择的日期(使用标准的.Net对照)下面的代码被称为获取电影租赁的日期范围
IEnumerable<Event> LiveDates = DataContext.Events.Where(d => d.StartDate.Value >= DateTime.Now);
IEnumerable<DateTime> AllLiveDates = null;
if (LiveDates != null && LiveDates.Count() > 0)
{
DateTime FromRentDate = LiveDates.Where(f => f.StartDate.HasValue).Min(f => f.StartDate).Value;
DateTime ToRentDate = LiveDates.Where(t => t.EndDate.HasValue).Max(f => f.EndDate).Value;
AllLiveDates = Enumerable.Range(0, int.MaxValue)
.Select(x => FromRentDate.Date.AddDays(x))
.TakeWhile(x => x <= ToRentDate.Date)
.Where(x => DataContext.Events.Any(c => x >= c.StartDate && x <= c.EndDate));
}
return AllLiveDates.ToList();
我想什么发生被存储为
RecordID FromRentDate ToRentDate
1 2016-10-06 18:00:00.000 2016-10-06 20:00:00.000
2 2015-10-06 18:00:00.000 2015-10-06 20:00:00.000
3 2015-09-29 16:00:00.000 2015-09-30 17:00:00.000
4 2015-09-11 00:00:00.000 2015-09-11 00:00:00.000
5 2015-09-09 10:00:00.000 2015-09-09 14:30:00.000
是当用户选择一个日期,它会从选定的日期到结束日期,包括任何包含日期的结束日期,如果我选择今天的日期,我应该获取所有记录,日期应该是列为:
2015-09-09
2015-09-11
2015-09-29
2015-09-30
2015-10-06 .... etc
请注意2015-09-29
,2015-09-30
是如何包含的,但2015-09-30
是而不是的开始日期。这是因为这部电影租赁期限为2天(9月29日和30日)。
我遇到的问题与上面的代码是它只返回1日期。调试它似乎进入AllLiveDates代码和东西是删除其他日期,但不知道是什么?
题外评论:用'LiveDates.Any()替换'LiveDates.Count()> 0' – Backs
没有,没有工作 – Computer