2017-04-25 4 views
0

私は2つのテーブル 'Car'と 'Booking'を持っています。 carテーブルには、CarID(PK)、Make、Model、Sizeというプロパティがあります。 「予約」テーブルには、ID(PK)、CarID(FK)、StartDateおよびEndDateが含まれています。SQLを使用したLinqクエリ

2つの表は、私は自分自身に入れているいくつかのデータが含まれています。

予約 - enter image description here カー - enter image description here

これは、これまでのところ、私のクエリです:

var searchQuery = from c in db.Cars 
    from b in db.Bookings 
    where c.Size == comboBox_CarType.Text 
    && RentEndDate.SelectedDate < b.EndDate && RentStartDate.SelectedDate > 
    b.StartDate 
    select c.CarID + " - " + c.Make.Trim() + " - " + c.Model.Trim(); 

ユーザ入力3彼らが借りたい車のサイズ、開始日と終了日の情報:これにより、その時点で利用可能な車が車のデータベースから呼び出されます。

私の質問:私は、上記のクエリは、車両にもたらさない可能な車にロードしようとするとき、私はあなたが内部結合を欠場ロジックは、私には理にかなっているにもかかわらず、しかし

+1

※最初はJoin *を使用しないでください。 ORMの仕事は、表をクラスと*関係*に​​マップすることです。コンテキストを正しく設定し、予約に 'Car'プロパティを追加すると、あなたはどんな結合も必要としません。予約をロードして、すべての車に同梱されます –

+1

ORMで作業しているときは、*テーブルを投稿することは役に立ちません。 *クラス*とあなたの*コンテキスト設定*はどこにありますか? –

答えて

1

をサイズ比較を完了しています一部、あなたのクエリがあるべき

var searchQuery = from c in db.Cars 
    join b in db.Bookings on c.CarId= b.CarId 
    where c.Size == comboBox_CarType.Text 
    && RentEndDate.SelectedDate < b.EndDate && RentStartDate.SelectedDate > 
    b.StartDate 
    select c.CarID + " - " + c.Make.Trim() + " - " + c.Model.Trim(); 
1
var searchQuery = 
    from b in db.Bookings 
    where b.Car.Size == comboBox_CarType.Text 
    && RentEndDate.SelectedDate < b.EndDate && RentStartDate.SelectedDate > 
    b.StartDate 
    select b.Car.CarID + " - " + b.Car.Make.Trim() + " - " + b.Car.Model.Trim(); 

あなたbookingそれが動作しない場合、その後、あなたはbookingとの間joinを行う必要があり、car性質を持っている必要がありますcarId

var searchQuery = from c in db.Cars 
    join b in db.Bookings on c.CarID equals b.CarID 
    where c.Size == comboBox_CarType.Text 
    && RentEndDate.SelectedDate < b.EndDate && RentStartDate.SelectedDate > 
    b.StartDate 
    select c.CarID + " - " + c.Make.Trim() + " - " + c.Model.Trim(); 
0

@Alejandroを使用してはそれに上にあります。使用したのと同じ構文を使うことができますが、ある種のIDで2つのテーブルを結合する必要があります。

また、開始日と終了日を=にしたいとも思います。車が準備ができていれば、それを右に借りたいですか?

var searchQuery = 
     from c in db.Cars 
     from b in db.Bookings 
     where c.Size == comboBox_CarType.Text 
      && RentEndDate.SelectedDate <= b.EndDate 
      && RentStartDate.SelectedDate >= b.StartDate 
      && c.CarId = b.CarId 
     select c.CarID + " - " + c.Make.Trim() + " - " + c.Model.Trim(); 
0

このようにすることもできます。

var eligibleBookings = cars.Where(r => bookings 
      .Where(b => (b.StartDate <= start) && (b.EndDate <= end)&& cars 
      .Where(c => c.Size == comboBox_CarType.Text) 
      .Select(c => c.CarId).Distinct().ToList() 
      .Contains(b.CarId)) 
      .Select(c => c.CarId).Contains(r.CarId)); 
関連する問題