2017-12-18 202 views
-1

在第一个业务是汽车租赁系统。选择间隔中不存在的位置?四个日期不同

我想所有的汽车,其中有间隔由用户选择没有订单

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

这是最后的代码,我写

  • 错误是:汽车还自带如果为了与相交间隔用户选择
+1

您需要添加更多条件;如果您的日期范围是一月份,那么您只需签署租用并在1月份返回的汽车。怎么样在1月出租,在二月返回或在十二月采取,返回injan –

回答

1

根据我的评论,你可能想要检查如果任何日期是在范围内或返回日期是在范围,或者如果租赁期限为比整个范围长:

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 

注:错字在你的DropDat 一个时间

+0

可能是一个TYPO:'pickdate <= &&'不正确 –

+0

感谢彼得 - 认为这是一个高光+ CTRL-拖动复制,我忘了做ctrl部分,所以它结束了一个举动.. :) –

0

如果我明白你正在尝试做的,

我做了如下修改

  • 我所用All!Any我找到代替它更容易阅读

  • 我把Db的语境在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(); 
    } 
} 
0

也许你可以使用:

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

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

这里假设汽车上现有的所有订单e都是“理智的”,因为它们的提货时间早于其下降时间。

相关问题