У меня есть некоторые данные, поступающих назад от веба-сервиса, который я отображенный на следующие классы:Список OrderBy вложенного свойство
public class Webinar {
public string Title { get; set; }
public string Description { get; set; }
...
public List<TimeZone> TimeZones { get; set; }
}
public class TimeZone {
public TimeSpan GmtOffset { get; set; }
public List<Session> Session { get; set; }
}
public class Session {
public int WebinarKey { get; set; }
public DateTime StartTime { get; set; }
public TimeSpan Duration { get; set; }
}
Надеется, это довольно ясно, что происходит: любой один вебинар может иметь несколько раз зон, которые, в свою очередь, проводят отдельные сеансы.
У меня есть список вебинаров List<Webinar> webinars = ...
, который заполнен данными. На странице я хотел бы представить веб-семинары, сгруппированные по часовому поясу (легко), а затем отсортированные по времени их начала.
Моя проблема: сеансы не обязательно упорядочиваются StartTime, когда я получаю данные, которые я хотел бы сделать. У меня есть следующий код, который работает, но воссоздание каждого объекта и отображение всех его свойств - это PITA, есть ли лучший способ сделать то, что я хочу?
List<Webinar> webinarsWithOrderedSessions = new List<Webinar>();
foreach (Webinar webinar in mappedWebinars)
{
Webinar currentWebinar = new Webinar
{
Title = webinar.Title,
...
TimeZones = new List<TimeZone>()
};
foreach (Webinar.TimeZone timeZone in webinar.TimeZones)
{
Webinar.TimeZone currentTimeZone = new TimeZone
{
Location = timeZone.Location,
Sessions = new List<Session>()
};
currentTimeZone.Sessions = timeZone.Sessions.OrderBy(session => session.StartTime).ToList();
currentWebinar.TimeZones.Add(currentTimeZone);
}
webinarsWithOrderedSessions.Add(currentWebinar);
}
UPDATE
здания по предложению по @Max, почему может этот бит кода не работает? Кажется, он не добавляет сессий вообще. Мне не обязательно нужны два свойства, поэтому я подумал, что просто применил ваше предложение непосредственно к основному свойству.
public class TimeZone
{
private List<Session> _sessions;
public List<Session> Sessions
{
get { return _sessions.OrderBy(s => s.StartTime).ToList(); }
set { _sessions = value; }
}
}
Почему вы скопировать объект просто для обновления порядка списка? Почему бы просто не использовать timezone.Sessions = timeZone.Sessions.OrderBy (session => session.StartTime) .ToList(); '? Хотя предложение Макса просто иметь свойство readonly для этого, вероятно, все равно лучше. – Chris