У меня есть этот класс:
public class Reservation
{
public int UserId;
public DateTime Date;
public int? AnotherField;
}
И этот класс:
public class ReservationRange
{
public int UserId;
public DateTime StartDate;
public DateTime EndDate;
public int? AnotherField;
}
Теперь у меня есть List<Reservation>
, и мне нужно преобразовать его в List<ReservationRange>
.
Например:
var r = new List<Reservation>();
r.Add(new Reservation() { UserId = 1, Date = new DateTime(2020, 4, 1) });
r.Add(new Reservation() { UserId = 1, Date = new DateTime(2020, 4, 2) });
r.Add(new Reservation() { UserId = 1, Date = new DateTime(2020, 4, 3) });
r.Add(new Reservation() { UserId = 1, Date = new DateTime(2020, 4, 5) });
r.Add(new Reservation() { UserId = 1, Date = new DateTime(2020, 4, 6) });
r.Add(new Reservation() { UserId = 1, Date = new DateTime(2020, 4, 7) });
r.Add(new Reservation() { UserId = 1, Date = new DateTime(2020, 4, 10) });
должно стать:
var rr = new List<ReservationRange>();
rr.Add(new Reservation() { UserId = 1, StartDate = new DateTime(2020, 4, 1), EndDate = new DateTime(2020, 4, 3) });
rr.Add(new Reservation() { UserId = 1, StartDate = new DateTime(2020, 4, 5), EndDate = new DateTime(2020, 4, 7) });
rr.Add(new Reservation() { UserId = 1, StartDate = new DateTime(2020, 4, 10), EndDate = new DateTime(2020, 4, 10) });
StartDate и EndDate в ReservationRange должны представлять непрерывный диапазон дат. Я могу преобразовать его, используя for-l oop, но мне интересно, есть ли более элегантное решение.
Все данные хранятся в базе данных MS SQL, поэтому, если сервер SQL сможет достичь этого быстрее, как я могу сделать это там?