2017-12-18 6 views
-1

最初のビジネスでレンタカーシステムです。インターバル内に存在しない場所を選択しますか? 4つの日付間で異なる

は私が

  • を書き誤りがある

    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月の場合、賃貸され返却された自動車のチェックのみが可能です。どのような場合は、janで借りた、feb ..に返されたか、またはdecで返された、 –

答えて

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の部分をするのを忘れてしまったので、動きが終わった。:) –

0

のタイプミス、

私は、次のような変形

  • 私はAllを使用しました!Anyの代わり私は

直接(一時変数のための必要性を)出力を返さない、私は

  • using声明の中で良い練習をDbのコンテキストを入れて、それが簡単に

  • を読むために見つけます私がそれを理解している前提は、すべての車を返却することではなく、注文することです。

    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は、ピックアップが落ち込み時間よりも早いという意味で「正常」であることを前提としています。

    関連する問題