我的意图是选择“开始”(begin_prefix)和“结束”(end_prefix)之间的所有条目(预订)
BUT!重要的是:
如果我在07:25-10:00预订 - 您要查询09:00-10:00它仍然应该显示预订,因为它保留房间直到10,无论如何..
所以......
07.25-10.00预订意味着查询09:00-10.00仍然会在09:00-10.00之间返回预订列表 (这意味着包括07.25-10.00)
public static List<booking> Today(DateTime begin, DateTime end)
{
try
{
IFormatProvider Culturez = new CultureInfo(ConfigurationManager.AppSettings["locale"].ToString(), true);
DateTime begin_prefix = DateTime.ParseExact(begin.ToString(), "dd-MM-yyyy HH:mm:ss", Culturez);
DateTime end_prefix = DateTime.ParseExact(end.ToString(), "dd-MM-yyyy HH:mm:ss", Culturez);
dbDataContext db = new dbDataContext();
// gives bookings BEFORE begin_prefix (why?)
IQueryable<booking> bQ = from b in db.bookings
where begin_prefix >= b.Starts &&
b.Ends <= end_prefix &&
b.Ends > b.Starts &&
b.pointsbookings.Count > 0
select b;
// ^gives bookings BEFORE begin_prefix (why?)
List<booking> bL = bQ.ToList();
return bL;
}
catch (Exception)
{
throw;
}
}
我已经尝试了一段时间了。似乎每次我将其更正为新的东西,在两个开始/结束日期之外的新重叠或选择似乎出现:(
更新标准和来源:预订必须在“begin_prefix”和“end_prefix”之内,或者在同一时间。
..目前上面的代码给了我预订在begin_prefix之前的日期,这不是故意的!我们在2011年,我也从2010年开始预订! **
新!!更新:
这就是我所拥有的:
SEARCH.START&gt; = BOOKING.START
预订.END&lt; = SEARCH.END
......问题出现时......
预订条目:10:00(开始)-14:00(结束)
这意味着根据上述: 08.59&gt; = 10.00 (SEARCH.START&gt; = BOOKING.START)
永远不会包含它。但它应该,因为这是同一个房间,座位是单独预订的!
答案 0 :(得分:1)
from b in db.bookings
where begin_prefix <= b.Starts && b.Starts < end_prefix && b.Ends <= end_prefix && bEnds >= b.Starts && b.pointsbookings.Count > 0
select b;
重要的更改是begin_prefix <= b.Starts
,而不是begin_prefix >= b.Starts
。我还添加了bEnds >= b.Starts
的支票,只是为了确定。
顺便说一句:你标记为重要的部分对我来说似乎完全是胡说八道。
答案 1 :(得分:0)
不应该是你的begin_prefix&lt; = b.starts和&gt; end_prefix?
答案 2 :(得分:0)
通过这种方式,您将在以下范围内选择正确的预订:
IQueryable<booking> bQ = from b in db.bookings
where b.Starts >= begin_prefix && b.Ends <= end_prefix
where b.pointsbookings.Any()
select b;
答案 3 :(得分:0)
下面:
IQueryable<booking> bQ = from b in db.bookings
where b.Starts >= begin_prefix &&
b.Ends <= end_prefix &&
b.Starts < b.Ends
b.pointsbookings.Count > 0
select b;
您希望开始时间在开始前缀(b.Starts >= begin_prefix
)之后,结束时间在结束前缀之前(b.Ends <= end_prefix
),以及开始之后的结束时间({{ 1}})。这就是这段代码现在所说的。你基本上已经扭转了不平等。
答案 4 :(得分:0)
不是100%确定这些代表什么,但我想知道为什么begin_prefix >= b.Starts
;不应该是相反的吗?
答案 5 :(得分:0)
我接受了这个问题,“从日期时间范围列表中,如何找到与给定日期时间范围重叠的所有内容?”
如果这确实是您要求的,那么您要查找的查询是
//b overlaps the datetime-range [begin_prefix, end_prefix]
begin_prefix <= b.Ends && end_prefix >= b.Starts