You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 使用LINQ结合嵌套列表筛选课程时如何避免重复返回结果

问题原因

  • 你使用了双层from查询,相当于把课程和学生做了笛卡尔积关联,课程下有多少个符合平均分>60的学生,这个课程就会在结果集中出现多少次,天然就会产生重复的课程实例。
  • 你原代码的foreach遍历的是未经过筛选的原始CoursesList,根本没有用到你写的Above60筛选结果,就算查询逻辑正确也得不到预期输出。
  • 另外你提供的类定义有笔误:Course类里的StudentsList类型写为List<Course>,实际应该是List<Student>,同时私有字段无法直接外部访问,建议改成公共属性或者提供对应的访问方法。

修复方案

推荐使用Any方法改写查询,直接判断课程下是否存在符合条件的学生,不会产生重复数据,性能也更高:

// 筛选所有至少有1名学生平均分超过60的课程,每个课程仅保留1个实例
var Above60 = from course in CoursesList
              where course.StudentList.Any(student => student.GetAverage() > 60)
              select course;

// 遍历筛选后的结果集,而非原始课程列表
foreach(var course in Above60)
{
    Console.WriteLine(course.CourseName);
}

如果你要保留原来的双层from写法,只需要在查询末尾追加Distinct()方法去重即可,注意同样要遍历Above60而非原始列表:

var Above60 = (from course in CoursesList
              from student in course.StudentList
              where student.GetAverage() > 60
              select course).Distinct();

内容的提问来源于stack exchange,提问作者DorD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:36:03