我希望能够返回在特定日期之间可以自由预订的Vehicle对象列表。
我有一个方法可以返回那些天之间当前在数据库中的预订列表,每个预订都有相关的车辆对象,所以我知道所有车辆都不可用。
我有另一种方法可以返回数据库中所有车辆的列表,但我需要一种方法来比较Booking.Vehicle和列表中返回的Vehicle对象。
我试过这个
foreach(var booking in bookings)
{
allVehicles.Remove(booking.Vehicle)
}
但车辆不会移除,为什么对象没有被正确比较?即使它被移除了相同的车辆对象。
//Testing to see if the objects compare as expected (they don't)
public static List<Vehicle> AvaliableVehiclesBetween(DateTime StartDate, DateTime EndDate)
{
List<Booking> bookings = Booking.BookingsBetween(StartDate, EndDate);
List<Vehicle> vehicles = AllVehicles();
Vehicle v = vehicles[0];
if(bookings[0].Vehicle.Equals(v)) {
vehicles = null;
}
return vehicles;
}
我跑完之后车辆不等于零;
答案 0 :(得分:1)
您可以尝试仅使用匹配
的主键~IDvar bookedIDs = bookings.Select(b => b.Vehicle.ID).ToList();
var freeVehicles = allVehicles.Where(v => !bookedIDs.Contains(v.ID));
至于您的实际问题,您可能没有为对象设置比较器,因此需要通过内存位置/参考进行比较。 What is the best way to compare two entity framework entities?
答案 1 :(得分:0)
你可以做两件事。 1)如果你需要比较整个对象,那么你需要将两个对象序列化为任何格式(XML),然后比较它。因为对象包含一些元数据,这可能不等于。
2)你可以比较两个对象的任何属性,比如“VehicleId”。
public static List<Vehicle> AvaliableVehiclesBetween(DateTime StartDate, DateTime EndDate)
{
List<Booking> bookings = Booking.BookingsBetween(StartDate, EndDate);
List<Vehicle> vehicles = AllVehicles();
Vehicle v = vehicles[0];
if(bookings[0]!=null && v!=null)
{
if(bookings[0].Vehicle.VehicleId.Equals(v.VehicleId))
{
vehicles = null;
}
}
return vehicles;
}