在第一个业务是汽车租赁系统。
我希望所有在用户选择的间隔内没有订单的汽车
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;
}
这是我写的最后一个代码
根据我的评论,您可能想要检查取件日期是在范围内还是返回日期在范围内,或者租赁期是否超过整个范围:
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
注意:DropDataTime中的拼写错误
也许你可以使用:
var temp = db.Cars.Where(item =>
item.Orders.All(e =>
e.DropDataTime <= pickdate
||
e.PickUpDateTime >= dropdate
)
).ToList();
对于所有现有订单e
,要么他们及时完成订单,要么他们只需要汽车。
这假设汽车上的所有现有订单e
都是“理智的”,因为他们的提货时间早于他们的下降时间。
如果我明白你要做什么,
我做了以下修改
All
而不是!Any
我觉得它更容易阅读using
声明中,这是一种很好的做法我理解的前提是不归还所有汽车并订购
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();
}
}