【发布时间】:2018-03-07 17:47:12
【问题描述】:
作为输入,我得到了 startDate 和 endDate。我必须从客户端进行 linq 查询,以检查在这段时间内 DB 中是否存在任何现有条目。
例如,在我的数据库中,如果我有一个 StartDate 为 2018-01-05 且 enddate 为 2018-01-09 的条目,并且用户尝试输入另一个条目,其开始日期为 2018-01-04 且 enddate 为 2018 -01-06 我不应该允许这样做,因为在我的数据库中我已经有一个在此时间范围内常见的条目。这是我的代码
var stDate = dbcontext.tables.Where( st =>
st.StartDate <= UserStartDate && st.EndDate >= UserEndDate && st.Status == "Queued" ||
st.StartDate >= UserStartDate && st.EndDate >= UserEndDate && st.Status == "Queued" ||
st.StartDate <= UserStartDate && st.EndDate <= UserEndDate && st.Status == "Queued" ||
st.StartDate >= UserStartDate && st.EndDate <= UserEndDate && st.Status == "Queued").ToList();
if (stDate.Count >0 )
{
//notification to user("There is an existing request within this time range");
}
else
{
// do the rest operation
}
但问题是,如果有人尝试从 2018 年 1 月 9 日到 2018 年 1 月 10 日输入条目,则它属于 3 种条件,并且应用程序不接受该条目。 对我有什么建议可以改进我的代码吗?
【问题讨论】:
-
我总是会在查询本身中进行过滤/检查。将数据检索到您的客户端以进行过滤/检查会要求解决诸如种族条件、网络负载过大等问题。至于“查找数据是否在范围内”的问题,这也是一个困扰我的问题。
-
你能检查
.Status这个范围吗? -
我认为没有任何日期范围不属于这些条件。
-
你是对的@FaizanRabbani,你知道如果用户的开始和结束日期落在现有条目中,我如何允许用户输入。 .Staus 我必须使用 Queued 因为我的其他条目可能在同一时间范围内但处于不同状态。我不关心这些状态。
-
@Shaif 你只希望 start 和 end 都不在现有范围内吗?这些范围可以吗:
2018-01-08&2018-01-152018-01-02&2018-01-072018-01-01&2018-01-15?