首先,业务是汽车租赁系统。
我希望所有在用户选择的间隔内没有订单的汽车
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;
}
这是我写的最后一个代码
答案 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;从某种意义上说,他们的回升时间早于他们的下降时间。