2017-12-18 203 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都是「理智的」,因爲它們的提貨時間早於其下降時間。

相關問題