如果我使用以下代码,我将获得同时学习课程1和课程2的学生名单。(这几乎是我想要的。)
这种行为让我感到困惑。有人能解释一下为什么会这样吗?以及如何避免它?谢谢。
IQueryable<Student> filteredStudents = context.Students;
filteredStudents = filteredStudents
.Where(s => s.Courses.Select(c => c.CourseID).Contains(1));
filteredStudents = filteredStudents
.Where(s => s.Courses.Select(c => c.CourseID).Contains(2));
List<Student> studentList = filteredStudents.ToList<Student>();
然而,如果我尝试在foreach循环中执行此操作(如下面的代码所示),那么我将得到一个列表,其中包含所有注册了最后一门课程的学生。
IQueryable<Student> filteredStudents = context.Students;
foreach (Course course in filter.Courses) {
if (course != null) {
filteredStudents = filteredStudents
.Where(s => s.Courses.Select(c => c.CourseID).Contains(course.CourseID));
}
}
List<Student> studentList = filteredStudents.ToList<Student>();
这种行为让我感到困惑。有人能解释一下为什么会这样吗?以及如何避免它?谢谢。
.Select(s => s)
是不必要的,Student
已经默认选择了。 - jjj