将一系列课程应用于学生集合

时间:2015-01-05 11:05:56

标签: c# .net linq collections

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

我目前有一批学生和一系列学生正在做的课程。这些课程有一个学生证,所以我可以写一个围绕着学生的大循环,为每个学生编写课程,并坚持下去。

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)*

我明白上述内容可能看起来像废话,但我希望它能传达我想要实现的目标。

亚历

2 个答案:

答案 0 :(得分:2)

你可以做类似的事情

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));
});

答案 1 :(得分:0)

如果您说 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)