首页 > 解决方案 > 如何使用特定的关键条件实体框架核心 3.1 检查(从日期 + 时间 - 到日期 + 时间)

问题描述

当用户创建会议时,我需要检查这个房间是否在两个日期时间From DateTimeTo DateTime)之间保留,如果它被保留返回到同一页面并显示消息。

当用户尝试创建会议时,我尝试在特定位置检查两个时段(从日期时间 - 到日期时间)之间的数据时间,系统检查(从日期时间 - 到日期时间)之间的数据时间,如果这些时段之间有任何日期时间,系统将发送消息到用户,告诉用户您无法创建会议,感觉该地方存在会议,但我被困了两天。

我尝试在下面应用这些解决方案,但是,它适用于某些情况,而其他情况则让我失败:

我应用的第一个解决方案:

if (db.Meetings.Any(x => x.POMId == meetings.POMId && x.MeetingDateFrom <= meetings.MeetingDateFrom && x.MeetingDateTo >= meetings.MeetingDateTo))
{
    TempData["message"] = "This date time (From Date: " + meetings.MeetingDateFrom.ToString("dd MMMM yyyy hh:mm tt") + ", To Date: " + meetings.MeetingDateTo.ToString("dd MMMM yyyy hh:mm tt") + ") in the " + placeOfMeeting + " is already booked";
    TempData["color"] = "warning";
    return RedirectToAction(nameof(Create));
}

我应用的第二种解决方案:

if (db.Meetings.Any(x => x.POMId == meetings.POMId && x.MeetingDateFrom >= meetings.MeetingDateFrom && x.MeetingDateTo <= meetings.MeetingDateTo))
{
    TempData["message"] = "This date time (From Date: " + meetings.MeetingDateFrom.ToString("dd MMMM yyyy hh:mm tt") + ", To Date: " + meetings.MeetingDateTo.ToString("dd MMMM yyyy hh:mm tt") + ") in the " + placeOfMeeting + " is already booked";
    TempData["color"] = "warning";
    return RedirectToAction(nameof(Create));
}

我应用的第三个解决方案:

if (db.Meetings.Any(x => x.POMId == meetings.POMId && ((x.MeetingDateFrom <= meetings.MeetingDateFrom && x.MeetingDateTo >= meetings.MeetingDateTo) || (x.MeetingDateFrom >= meetings.MeetingDateFrom && x.MeetingDateTo <= meetings.MeetingDateTo))))
{
    TempData["message"] = "This date time (From Date: " + meetings.MeetingDateFrom.ToString("dd MMMM yyyy hh:mm tt") + ", To Date: " + meetings.MeetingDateTo.ToString("dd MMMM yyyy hh:mm tt") + ") in the " + placeOfMeeting + " is already booked";
    TempData["color"] = "warning";
    return RedirectToAction(nameof(Create));
}

但是所有这些解决方案在测试时都会失败。

问题是:

如果数据库表中存在与否,如何使用特定键(位置、保留等)检查两个日期+时间(从日期时间到日期时间) ?

标签: c#datetimeasp.net-core-3.1entity-framework-core-3.1

解决方案


在超过 4 天的工作中应用了许多测试用例后,我找到了这个案例的解决方案并应用了,它运行良好。

这种情况的解决方案是:

if (db.Meetings.Any(x => x.POMId == meetings.POMId && x.MeetingDateTo >= meetings.MeetingDateFrom && x.MeetingDateFrom <= meetings.MeetingDateTo))
{
    TempData["message"] = "This date time (From Date: " + meetings.MeetingDateFrom.ToString("dd MMMM yyyy hh:mm tt") + ", To Date: " + meetings.MeetingDateTo.ToString("dd MMMM yyyy hh:mm tt") + ") in the " + placeOfMeeting + " is already booked";
    TempData["color"] = "warning";
    return RedirectToAction(nameof(Create));
}

解释:

您将检查(New From Date <= All To Date from DB) && (New To Date >= All From Date from DB)


推荐阅读