C# или T- SQL - как эффективно преобразовать список даты и времени в диапазон дат - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть этот класс:

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 сможет достичь этого быстрее, как я могу сделать это там?

...