如何在ASP.NET中使List变量保持不变

时间:2017-04-14 13:39:10

标签: c# asp.net-mvc asp.net-core

在此代码中,我试图检查用户输入的时间可用的房间。要测试房间是否空闲,我将房间名称更改为所有选项并进行碰撞检查。问题是,当我更改房间名称时,它还会在我的现有书籍列表中更新它。有没有办法确保现有的书籍不会改变?

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

感谢您的帮助!

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

我修复此问题的方法是在Booking.cs文件中添加一个名为proposed的新bool字段。创建建议的预订时,它会自动将其设置为true。在我的DoesRoomBookingClash中,我添加了一个if语句,如果建议为真,则忽略数据库条目。完成所有更改后,建议设置为false。