c# - 使用 LINQ 检查计划重叠

标签 c# sql asp.net-mvc entity-framework linq

我有如下表格

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 < startsAtx.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/

相关文章:

c# - 图像分割 - 拆分和合并(四叉树)

sql - ROWNUM 如何在分页查询中工作?

mysql - 如何在SQL中计算 "as large as the next #"中的数字?

c# - 动态更改 ASP.NET MVC 中的样式属性

c# - 你必须调用 "WebSecurity.InitializeDatabaseConnection"但我知道

c# - 如何测试 EF 模型

c# - MVC Razor EditorFor Display Field help 当鼠标悬停在字段 aka 工具提示上时

c# - 为razorpdf mvc添加水印

c# - 更改 GroupBox 组件中的边框

sql - 如何使用CTE在SQLite中删除重复的列-错误