我正在处理对象集合,并且每当遇到问题时都会试图摆脱循环的习惯并查看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)*
我明白上述内容可能看起来像废话,但我希望它能传达我想要实现的目标。
亚历
答案 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)