实体框架不比较在不同时间返回的相同对象

时间:2013-03-12 12:18:57

标签: asp.net-mvc entity-framework

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

我跑完之后车辆不等于零; enter image description here

2 个答案:

答案 0 :(得分:1)

您可以尝试仅使用匹配

的主键~ID
var 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;

}