2

我希望能够返回在特定日期之间可以免费预订的 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;
}

在我运行这个之后,车辆不等于空; 在此处输入图像描述

4

2 回答 2

1

您可以尝试仅使用主键 ~ID 进行匹配

var bookedIDs = bookings.Select(b => b.Vehicle.ID).ToList();
var freeVehicles = allVehicles.Where(v => !bookedIDs.Contains(v.ID));

至于您的实际问题,您可能没有为您的对象设置 Comparator ,因此它是通过内存位置/引用进行比较的。比较两个实体框架实体的最佳方法是什么?

于 2013-03-12T12:32:27.630 回答
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;

}

于 2013-03-12T16:44:59.703 回答