C# 使用SQL的Linq查询
我有两张桌子“汽车”和“预订”。car表包含属性CarID(PK)、品牌、型号和尺寸。“预订”表包含ID(PK)、CarID(FK)、开始日期和结束日期 这两个表包含我自己输入的一些数据: 预订- 汽车- 这是我目前的疑问: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
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时,张贴表格没有任何帮助。您的类和上下文配置在哪里?