我有如下表格
SL Classroom Weekday StartTime EndTime
-- --------- ------- --------- --------
1 ADMN-100 Friday 01:00:00 02:00:00
2 ADMN-100 Friday 02:00:00 03:00:00
3 ADMN-100 Monday 01:00:00 02:00:00
4 LAB-501 Monday 01:00:00 02:00:00
如何使用 LINQ 检查是否发生时间重叠?
我在下面做的失败了,
bool check = true;
check = db.Classrooms.Any(x => x.Classroom.Equals(roomNo)
&& x.Weekday.Equals(weekDay)
&& x.StartTime < startsAt
&& x.EndTime > startsAt);
最佳答案
您的代码几乎是正确的,但要更改 x.StartTime < startsAt
至 x.StartTime < endsAt
. Schedule
为了完整性,类在下面。
class Schedule
{
public string Classroom { get; set; }
public string Weekday { get; set; }
public TimeSpan StartTime { get; set; }
public TimeSpan EndTime { get; set; }
public bool OverlapsWith(Schedule schedule)
{
return schedule.StartTime < EndTime &&
schedule.EndTime > StartTime &&
schedule.Weekday == Weekday &&
schedule.Classroom == Classroom;
}
}
快速说明 - 使用 TimeSpan
这样一个 DateTime
如果月、年或日关闭,对象不会扰乱您的逻辑。 What you really want is a time of day , 和 TimeSpan
提供您真正想要的“小时”、“分钟”和“秒”。比较将适用于 TimeSpan
对象。不过,我不确定这将如何与 EF 一起使用。
如果你需要一个字符串到TimeSpan
转换,试试 TimeSpan.Parse
.它应该适用于您在问题中提供的格式。
OverlapsWith
方法可能不会在 Schedule
中,但它只是为了向您展示您的代码基本相同。
关于c# - 使用 LINQ 检查计划重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37074004/