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",因为他们的提货时间早于下车时间。
第一个业务是汽车租赁系统。
我想在用户选择的时间间隔内获取所有没有订单的车
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",因为他们的提货时间早于下车时间。