2017-04-14 34 views
3

在此代碼中,我正試圖檢查用戶輸入的時間內有哪些房間可用。爲了測試房間是否免費,我將房間名稱更改爲所有選項並進行衝突檢查。問題是,當我更改房間名稱時,它也會在我的預訂列表中更新它。有沒有辦法確保現有預訂不會更改?如何在ASP.NET中創建一個List變量常量

var existingBookings = _context.Bookings.ToList(); 
var booking = await _context.Bookings.SingleOrDefaultAsync(m => m.BookingID == id); 

List<Room> roomlist = new List<Room>(); 

roomlist = (from product in _context.Room 
      select product).ToList(); 

List<Room> availableRooms = new List<Room>(); 

foreach (var item in roomlist) 
{ 
    booking.RoomName = item.RoomName; 

    if (BusinessLogic.BookingChecker.DoesBookingClash(booking, existingBookings) == null) 
    { 
     availableRooms.Insert(0, new Room { RoomID = item.RoomID, RoomName = item.RoomName }); 
    } 

    booking.RoomName = "UNDEF"; 
} 

感謝您的幫助!

回答

0

我解決了這個問題的方式,是添加一個名爲提出到Booking.cs文件的新布爾領域。創建預訂時,它會自動將其設置爲true。在我的DoesRoomBookingClash我添加了一個if語句來忽略數據庫條目,如果提議是真的。一旦完成所有更改,建議設置爲false。

4

爲了做到這一點,您必須創建Booking的新實例。您可以調用構造函數並複製必要的屬性,或實施ICloneable.Clone方法。

public class Booking : ICloneable 
{ 
    public Booking Clone() 
    { 
     return new Booking() { RoomID = this.RoomID, etc. }; 
    } 

    object ICloneable.Clone() 
    { 
     return this.Clone(); 
    } 
} 

然後你怎麼稱呼它:

booking = booking.Clone(); 

// use the new booking instance.