C# 如何在另一个IEnumerable中筛选IEnumerable?

C# 如何在另一个IEnumerable中筛选IEnumerable?,c#,C#,我在一个控制器中使用了这个方法,它创建了一个学生列表,假设课程ID为5: int courseID = 5; var students = _context.Students.ToList() 当然,每个学生都有一个IEnumerable,因此可以有多个课程。你如何过滤它们,以便只收到不在该课程中的学生列表 例如: var students = _context.Students.ToList().Where(student => student.NoCoursesHave(course

我在一个控制器中使用了这个方法,它创建了一个学生列表,假设课程ID为5:

int courseID = 5;
var students = _context.Students.ToList()
当然,每个学生都有一个IEnumerable,因此可以有多个课程。你如何过滤它们,以便只收到不在该课程中的学生列表

例如:

var students = _context.Students.ToList().Where(student => student.NoCoursesHave(courseID == 5);
但这显然不起作用

我知道,当您只处理一个变量(如其名字)时,可以非常轻松地进行筛选,如下所示:

var students = _context.Students.ToList().Where(student => student.FirstName != "Bob");
超级容易!但是如何在另一个IEnumerable中筛选一个IEnumerable

[...].Where(student => !student.Courses.Any(course => course.Id == 5));
假设
课程
学生
班级中的
IEnumerable
的名称,则应该这样做

student.Courses.Any(course=>course.Id==5)
将返回
true
如果有
Id
等于
5
的课程,否则将返回
false



根据评论,最后使用
.ToList()
会更好。

学生的
中有什么?
.Where(student=>!student.Courses.Any(course=>course.Id==5))
我在问题中解释了它。这是我最初写下的东西,但我认为这是无关的信息。你到底为什么要在代码中添加
ToList
调用?这只是在积极地用你的方式让代码变得更糟而没有任何好处。有趣的是,我的评论得到了4票赞成票,但当我把它作为一个答案加入时,即时向下VOTE什么是
课程
课程
应该是链接到学生的课程的导航属性。您从何处获得该信息?每个学生都有一个IEnumerable of Course。所以我认为假设
Courses
属性存在是完全有效的。我认为在答案中添加Servy关于
ToList
的评论也很有价值。@Patrickhoffman我的猜测来自
student.NoCoursesHave()
。编辑-也是德克说的