【发布时间】:2015-09-07 10:49:46
【问题描述】:
我有一个电影租借应用程序。公司将输入电影租借日期和电影租借结束日期。日期可以重叠(因为您可以有很多客户)。数据库中的数据存储为
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
当用户选择一个日期(使用标准 .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();
我想要发生的是,当用户选择一个日期时,它会获取从所选日期到结束日期的所有日期,包括电影也上映的任何包含日期,因此如果我选择,请使用上述数据今天的日期我应该取回所有记录,日期应列为:
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 -
不,那没用
标签: c# asp.net linq linq-to-sql