介于/ Timerange LINQ之间

时间:2011-03-10 14:03:25

标签: c# linq datetime date

我的意图是选择“开始”(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)

永远不会包含它。但它应该,因为这是同一个房间,座位是单独预订的!

6 个答案:

答案 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