C# 使用SQL的Linq查询

C# 使用SQL的Linq查询,c#,linq,C#,Linq,我有两张桌子“汽车”和“预订”。car表包含属性CarID(PK)、品牌、型号和尺寸。“预订”表包含ID(PK)、CarID(FK)、开始日期和结束日期 这两个表包含我自己输入的一些数据: 预订- 汽车- 这是我目前的疑问: var searchQuery = from c in db.Cars from b in db.Bookings where c.Size == comboBox_CarType.Text && RentEndDate.Sel

我有两张桌子“汽车”和“预订”。car表包含属性CarID(PK)、品牌、型号和尺寸。“预订”表包含ID(PK)、CarID(FK)、开始日期和结束日期

这两个表包含我自己输入的一些数据:

预订- 汽车-

这是我目前的疑问:

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();
var searchQuery=从c到db.Cars
从b到db。预订
其中c.Size==comboBox\u CarType.Text
&&RentEndDate.SelectedDate
b、 起始日期
选择c.CarID+“-”+c.Make.Trim()+“-”+c.Model.Trim();
用户输入3条信息:尺寸、开始日期和结束日期。这将从汽车数据库中调出当时可用的汽车


我的问题:我已经完成了尺寸比较,但是当我尝试加载可用车辆时,上面的查询不会引入车辆,即使逻辑对我来说是有意义的

如果您错过了内部连接部分,您的查询应该是

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();
var searchQuery=从c到db.Cars
在db中加入b。c.CarId=b.CarId上的预订
其中c.Size==comboBox\u CarType.Text
&&RentEndDate.SelectedDate
b、 起始日期
选择c.CarID+“-”+c.Make.Trim()+“-”+c.Model.Trim();

如果未找到内部联接部分,则查询应为

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();
var searchQuery=从c到db.Cars
在db中加入b。c.CarId=b.CarId上的预订
其中c.Size==comboBox\u CarType.Text
&&RentEndDate.SelectedDate
b、 起始日期
选择c.CarID+“-”+c.Make.Trim()+“-”+c.Model.Trim();

@Alejandro正在关注此事。您可以使用与使用相同的语法,但必须在某种id上连接这两个表

我还认为您希望开始和结束日期也是
=
。如果车准备好了,你想租下来,对吗

 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();
var searchQuery=
从c到db.Cars
从b到db。预订
其中c.Size==comboBox\u CarType.Text
&&RentEndDate.SelectedDate=b.StartDate
&&c.CarId=b.CarId
选择c.CarID+“-”+c.Make.Trim()+“-”+c.Model.Trim();

@Alejandro正在关注此事。您可以使用与使用相同的语法,但必须在某种id上连接这两个表

我还认为您希望开始和结束日期也是
=
。如果车准备好了,你想租下来,对吗

 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();
var searchQuery=
从c到db.Cars
从b到db。预订
其中c.Size==comboBox\u CarType.Text
&&RentEndDate.SelectedDate=b.StartDate
&&c.CarId=b.CarId
选择c.CarID+“-”+c.Make.Trim()+“-”+c.Model.Trim();

您也可以这样做

 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));
var-eligibleBookings=cars.Where(r=>bookings
.Where(b=>(b.StartDate c.CarId).Distinct().ToList())
.包含(b.CarId))
.选择(c=>c.CarId).包含(r.CarId));

您也可以这样做

 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));
var-eligibleBookings=cars.Where(r=>bookings
.Where(b=>(b.StartDate c.CarId).Distinct().ToList())
.包含(b.CarId))
.选择(c=>c.CarId).包含(r.CarId));
首先不要使用Join。ORM的工作是将表映射到类和关系。如果正确配置上下文,并将
Car
属性添加到bookings,则不需要任何连接。只需加载预订,所有的汽车都会随它们一起提供。在使用ORM时,张贴表格没有任何帮助。类和上下文配置在哪里?首先不要使用Join。ORM的工作是将表映射到类和关系。如果正确配置上下文,并将
Car
属性添加到bookings,则不需要任何连接。只需加载预订,所有的汽车都会随它们一起提供。在使用ORM时,张贴表格没有任何帮助。您的类和上下文配置在哪里?