using System.Collections.Generic;
public DateTime StartDateTime {get;set;}
public DateTime EndDateTime {get;set;}
private static DateTime GetStartDateTime(DateTime dateTime, int startOfDayHour)
if (dateTime.Hour < startOfDayHour)
return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day - 1, startOfDayHour, dateTime.Minute, dateTime.Second);
return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, startOfDayHour, dateTime.Minute, dateTime.Second);
public static void Main()
var shifts = new List<Shift>
new Shift{StartDateTime = DateTime.Parse("2022-06-07 22:00"), EndDateTime = DateTime.Parse("2022-06-08 04:00"), id=1},
new Shift{StartDateTime = DateTime.Parse("2022-06-07 22:00"), EndDateTime = DateTime.Parse("2022-06-08 06:00"), id=2}
var startDateTime = GetStartDateTime(shifts[0].StartDateTime, startOfDayHour);
var endDateTime = startDateTime.AddDays(1);
Console.WriteLine("startDateTime = {0:yyyy-MM-dd hh:mm} endDateTime = {1:yyyy-MM-dd hh:mm}", startDateTime, endDateTime);
var shifts2 = shifts.Where(s => s.StartDateTime >= startDateTime && s.EndDateTime <= endDateTime && s.id == 1);
Console.WriteLine("{0}",shifts2.Count()>0);
var shifts3 = shifts.Where(s => s.StartDateTime >= startDateTime && s.EndDateTime <= endDateTime && s.id == 2);
Console.WriteLine("{0}",shifts3.Count()>0);