C#补全Where子句GroupBy逻辑筛选重复低分学生
C# LINQ 重复低分学生筛选补全方案
规则说明
- 低分判定标准:分数值 小于等于5
- 筛选目标:输出存在至少2次相同低分记录的学生,预期运行结果依次为Andy、Bobby、Cindy
补全后完整代码
缺失的判断逻辑为校验分组结果中是否存在「分数属于低分且出现次数≥2」的分组,补全后完整代码如下:
class Student { public int Id { get; set; } public string Name { get; set; } = null!; public List<int> Scores { get; set; } = new List<int>(); public static List<Student> GetStudents() { return new List<Student>() { new Student { Id = 1, Name="Andy", Scores={1,1,2,2,3,4,5,6,7,8} }, new Student { Id = 2, Name="Bobby", Scores={3,3,3,3,4,5} }, new Student { Id = 3, Name="Cindy", Scores={1,1,2,2,3,4,5} }, new Student { Id = 4, Name="Dave", Scores={1,2,3,4,5,6,7,8,9,10} } }; } } class Program { static void Main() { var query = Student.GetStudents() .Where(s => s.Scores.GroupBy(i => i) .Any(g => g.Key <= 5 && g.Count() >= 2)); foreach (var x in query) Console.WriteLine(x.Name); Console.ReadLine(); } }
逻辑解释
s.Scores.GroupBy(i => i)会把当前学生的所有分数按值分组,相同分数归为同一组,分组的Key属性对应该组的分数值,组内元素个数对应该分数的出现次数- 后续调用
Any()方法匹配符合要求的分组,两个判断条件分别为:g.Key <=5:当前分组对应的分数属于低分范畴g.Count() >=2:当前低分的出现次数大于等于2,即存在重复记录
- 只要学生的分数列表中存在任意一个满足上述两个条件的分组,就会被筛选进入结果集
- 测试数据中Dave的1-5分各出现1次,无重复低分,因此不会被输出,完全匹配预期结果
内容的提问来源于stack exchange,提问作者Display Name
相关产品推荐
相关产品推荐

