2013-03-12 1 views
2

특정 날짜 사이에 예약 할 수있는 Vehicle 개체의 목록을 반환 할 수 있기를 원합니다.다른 시간에 반환 된 동일한 개체를 비교하지 않는 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

답변

1
당신은 당신이

실제 질문에 대해서는
var bookedIDs = bookings.Select(b => b.Vehicle.ID).ToList(); 
var freeVehicles = allVehicles.Where(v => !bookedIDs.Contains(v.ID)); 

일치 단지 기본 키 ~ ID를 사용하여 시도 할 수

, 당신은 아마 당신의 객체의 비교기 설정이없는 위치/참조. What is the best way to compare two entity framework entities?

+0

나는 코드가 잘못된 결과를 얻을 것이다 차량 ID 년대에 예약 ID 년대를 비교 생각합니다. – danludwig

+0

@ danludwig - 좋은 캐치, 편집 됨. –

+0

또 하나의 catch -'bookedIDs'는 콜렉션 조작 ('.Add','.Remove' 등)에 사용되지 않기 때문에'.ToList()'대신'.ToArray()'를 사용하십시오. 이 경우에 자동적으로 열거되기 때문에'.Contains (v.ID)'가 사용되는 유일한 장소가된다면 그것을 생략 할 수도 있습니다. – danludwig

0

두 가지 작업을 수행 할 수 있습니다. 1) 전체 개체를 비교해야하는 경우 두 개체를 모든 형식 (XML)으로 serialize 한 다음 비교해야합니다. 개체에 일부 메타 데이터가 포함되어 있기 때문에 같지 않을 수 있습니다.

2) "VehicleId"와 같은 두 개체의 속성을 비교할 수 있습니다. {

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; 

}

public static List<Vehicle> AvaliableVehiclesBetween(DateTime StartDate, DateTime EndDate) 

관련 문제