После обновления вопроса вы можете использовать:
OrderBy для заказа бронирования.
GroupBy для сгруппировать по дате и номеру комнаты.
ToDictionary , чтобы создать словарь (резервирование, список резервирований), например, следующий код:
Dictionary<Reservation, List<Reservation>> result = reservations.OrderBy(r => r.Id)
.GroupBy(x => new { x.StartDate, x.Room.Number })
.Where(x => x.Count() > 1)
.ToDictionary(
x => x.First(),
y => y.Skip(1).ToList()
);
Для теста:
List<Reservation> reservations = new List<Reservation>
{
new Reservation {Id = 5, StartDate = DateTime.Now.Date, Room = new Room{ Number = 4 }},
new Reservation {Id = 3, StartDate = DateTime.Now.Date, Room = new Room{ Number = 3 }},
new Reservation {Id = 1, StartDate = DateTime.Now.Date, Room = new Room{ Number = 2 }},
new Reservation {Id = 2, StartDate = DateTime.Now.Date, Room = new Room{ Number = 2 }},
new Reservation {Id = 4, StartDate = DateTime.Now.Date, Room = new Room{ Number = 2 }},
new Reservation {Id = 6, StartDate = DateTime.Now.Date, Room = new Room{ Number = 4 }}
};
Демо
foreach(var item in result)
{
Console.WriteLine($"Key : Id::{item.Key.Id} : Number::{item.Key.Room.Number} ==> Values: ");
foreach(var item1 in item.Value)
{
Console.WriteLine($"Id::{item1.Id} : Number::{item1.Room.Number}");
}
}
Результат
Key : Id::1 : Number::2 ==> Values:
Id::2 : Number::2
Id::4 : Number::2
Key : Id::5 : Number::4 ==> Values:
Id::6 : Number::4
Надеюсь, это поможет.