我不是一个 LINQ 程序员,所以这让我有些困惑。我有两个表:第一个是带有 StartDate 和 EndDate 以及 ID 的 Schedule;其次,带有 InstanceDate 和 ScheduleID 的 ScheduleInstance 表。对于 Schedule.StartDate 和 Schedule.EndDate 之间的每一天,我需要创建一个 ScheduleInstance 行 - 但是,只提前 24 小时。由于计划是在 24 小时前瞻内创建和删除的,因此我必须每 n 分钟生成一个检查器,以检查 ScheduleID 的 ScheduleInstance 是否存在于该 24 小时窗口内。
楷模:
public class Schedule
{
public int ID { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
public class ScheduleInstance
{
public int ID { get; set; }
public int ScheduleID { get; set; }
public DateTime InstanceDate { get; set; }
}
LINQ的开始:
var skeds = from sked in context.Schedules
join instance in context.ScheduleInstances
on sked.ID equals instance.ScheduleID
where ((sked.StartDate <= DateTime.Now) && (sked.EndDate >= DateTime.Now))
select sked.ID;
(显然错了)
总而言之,我需要在接下来的 24 小时内获取 ScheduleInstance.InstanceDate 不存在的 Schedule.ID 列表。
非常感谢您的帮助。
更新
DateTime tomorrow = DateTime.Now.AddDays(1);
var skeds = from sked in context.Schedules
join instance in context.ScheduleInstances
on sked.ID equals instance.ScheduleID into g
where (sked.StartDate <= tomorrow) &&
(sked.EndDate >= tomorrow) &&
!g.Any()
select sked;
现在,如果明天不存在一个实例,则会创建一个实例(在与此处无关的后续代码中)。如果我将 StartDate 设置为 Now+2mins ,那么在 2 分钟后创建计划 - 完美。但是,如果我将时钟提前 24 小时,我应该会得到一大堆新实例。重申一下,如果计划开始日期是现在,结束日期是 30 天后,那么我应该以 31 个实例结束,每个新实例都提前 24 小时创建。