我有一些數據從一個Web服務,這是我映射到以下班回來:列表排序依據嵌套屬性
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();'?儘管馬克斯的建議是隻要有隻讀屬性就可以做到,但反正可能更好。 – Chris