C# 如何在另一个IEnumerable中筛选IEnumerable?
我在一个控制器中使用了这个方法,它创建了一个学生列表,假设课程ID为5: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
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()
。编辑-也是德克说的