РЕДАКТИРОВАТЬ:
Если вы хотите сопоставить SemesterName со списком курсов, я бы рекомендовал словарь.
semesters.ToDictionary(semester => semester.Name, semester =>
semesters.SelectMany(sid =>
CourseInstance.Get(sid.SemesterId))
.Select(c => new Course
{Code = c.Course.Code, Name = c.Course.Name}).ToList())
Это создаст Dictionary<string, List<Course>
Это почти идентичнокод ниже, за исключением того, что он сопоставляет semester.Name в качестве ключа.Это, конечно, означает, что вы должны иметь уникальные имена семестров, иначе словарь не может быть создан.
Вы повторно инициализируете courseInfos каждый раз, когда выполняете цикл в foreach, так что вы получите толькосписок последнего semesterId.
Вы можете написать запрос linq, который сделает все это в одной строке для вас.
return semesters.SelectMany(sid => CourseInstance.Get(sid.SemesterId))
.Select(c => new Course { Code = c.Course.Code,
Name = c.Course.Name }).ToList()
Чтобы разбить его,
.SelectMany(sid => CourseInstance.Get(sid.SemesterId))
делает то же самое, что и foreach.Он вернет IEnumerable<CourseInstance>
.
После этого вы звоните
.Select(c => new Course { Code = c.Course.Code, Name = c.Course.Name })
на результат, который мы получили в последнем разделе;он возвращает IEnumerable<Course>
, который вы превращаете в список.
SelectMany работает аналогично Select, за исключением того, что он будет брать каждый IEnumerable<Course>
и объединять его в одну последовательность вместо IEnumerable<IEnumerable<Course>>