将课程集合应用于学生集合

apply a collection of courses to a collection of students

我正在处理对象集合,并试图摆脱每当遇到问题时循环并查看 API 以查看是否已经提供的习惯。

我目前有学生合集和学生正在上的课程合集。这些课程有一个学生 ID,所以我可以写一个大的旧 for 循环,围绕学生循环,为每个学生找出课程并将其粘贴进去。

Dim Students As Generic.List(Of Student)
Dim Courses As Generic.List(Of Course)

For Each s As Student In Students
    s.Courses = Courses.Where(x => x.StudentId == s.StudentId)
Next

我想知道 linq 是否以某种形式涵盖了此功能。我正在寻找这样的东西:

Students.*DoSomethingClever(Courses, x => x.StudentId)*

我知道以上内容可能看起来像废话,但我希望它传达了我正在努力实现的目标。

亚历克斯

你可以做类似的事情

Students.ForEach(s => s.Courses = Courses.Where(x => x.StudentId == s.StudentId));

您可以并行执行此操作(仅适用于大集合并且仅当您至少有两个处理器内核时)

Students.AsParallel().ForAll(s=>
{
    s.Courses = Courses.Where(x => x.StudentId == s.StudentId));
});

如果说 DoSomethingClever 是指加入课程中的数据,请参阅:

Dim JoinedData = From s In Students
                    Join c In Courses
                    On s.StudentId Equals c.StudentId
                    Select StudentName = s.FirstName, CourseName = c.Name

更多信息:How to: Combine Data with LINQ by Using Joins (Visual Basic)