Select 哪里不存在区间?四个日期不同

Select where not exist in interval ? Different between four dates

第一个业务是汽车租赁系统。

我想在用户选择的时间间隔内获取所有没有订单的车

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;
}

这是我写的最后一个代码

根据我的评论,您可能想要检查取件日期是否在范围内或 return 日期在范围内,或者租期是否长于整个范围:

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

注意:您的 DropData时间有错字

如果我明白你想做什么,

我做了如下修改

  • 我用 All 而不是 !Any 我发现它更容易阅读

  • 我把 Db 上下文放在 using 语句中,好的做法

  • 我return直接输出(不需要临时变量)

我理解的前提是return所有车都不要,然后下单

public List<Car> SearchCar(DateTime pickdate, DateTime dropdate)
{
   using (var db = new CarRentalDBEntities())
   {
       return db.Cars.Where(item => item.Orders.All(e =>
               // where order pickup date is less Pick or greater than drop
           (e.PickUpDateTime < pickdate || e.PickUpDateTime > dropdate) &&
               // where order Drop date is less Pick or greater than drop
           (e.DropDataTime < pickdate || e.DropDataTime > dropdate)))
               .ToList();
   }
}

也许你可以使用:

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

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

假设汽车上的所有现有订单 e 都是 "sane",因为他们的提货时间早于下车时间。