私は LINQ プログラマーではないので、これはやや困惑しています。2 つのテーブルがあります。1 つ目は、StartDate と EndDate、および ID を含むスケジュールです。次に、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 の ScheduleInstance が存在しない 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 時間進めると、大量の新しいインスタンスが取得されるはずです。繰り返しになりますが、Schedule の開始日が今で、終了日が 30 日後の場合、最終的に 31 個のインスタンスが作成され、新しいインスタンスはそれぞれ 24 時間前に作成されます。