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;
}

これを実行した後、車両はnullに等しくなりません。 ここに画像の説明を入力してください

4

2 に答える 2

1

マッチングに主キー〜IDのみを使用してみることができます

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

実際の質問については、オブジェクトのコンパレータが設定されていない可能性があるため、メモリの場所/参照で比較しています。2つのエンティティフレームワークエンティティを比較するための最良の方法は何ですか?

于 2013-03-12T12:32:27.630 に答える
0

あなたは2つのことをすることができます。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 に答える