选择区间中不存在的位置?四个日期之间不同

时间:2017-12-18 09:26:31

标签: c# asp.net entity-framework linq data-access-layer

首先,业务是汽车租赁系统。

我希望所有在用户选择的间隔内没有订单的汽车

public List<Car> SearchCar(DateTime pickdate, DateTime dropdate)
{
    var db = new CarRentalDBEntities();
    var temp = new List<Car>();

    temp = db.Cars.Where(item => 

       !item.Orders.Any
        (e => e.PickUpDateTime >= pickdate && dropdate  <= e.DropDataTime)

        ).ToList();

    return temp;
}

这是我写的最后一个代码

  • 错误是:如果订单与用户选择的间隔相交,汽车仍然会出现

3 个答案:

答案 0 :(得分:1)

根据我的评论,您可能想要检查取件日期是否在范围内,或者退货日期是否在范围内,或者租赁期是否超过整个范围:

sample size / sample width

注意:DropDat a 时间

中的拼写错误

答案 1 :(得分:0)

如果我明白你要做什么,

我做了以下修改

  • 我使用e => (pickdate <= e.PickUpDateTime && e.PickUpDateTime < dropdate) || //picked up in period (pickdate <= e.DropDataTime && e.DropDataTime < dropdate) || //dropped off in period (e.PickUpDateTime < pickdate && e.DropDataTime > dropdate) //rental spans period 代替All我觉得更容易阅读

  • 我将Db上下文放在!Any语句中,良好做法

  • 我直接返回了输出(不需要临时变量)

我理解的前提是不返回所有车辆并订购

using

答案 2 :(得分:0)

也许你可以使用:

var temp = db.Cars.Where(item => 
  item.Orders.All(e =>
  e.DropDataTime <= pickdate
  ||
  e.PickUpDateTime >= dropdate
  )
  ).ToList();

对于所有现有订单e,他们要么及时完成订单,要么他们只需要汽车。

这假设汽车上的所有现有订单e都是“理智的”#34;从某种意义上说,他们的回升时间早于他们的下降时间。