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

如何用LINQ筛选出属于所有指定班级的StudentId?

正确的LINQ实现方案

原代码问题分析

你的代码逻辑存在错误:o.All(m => filterClassId.All(s => s == m.ClassId)) 要求该学生的每一条班级记录都必须同时等于筛选列表里的所有ClassId,这显然无法满足,因此得不到正确结果。

正确实现方案

以下两种方式都可以实现需求,筛选出属于所有指定班级的StudentId:

方案一:检查筛选班级全覆盖

List<int> filterClassId = new List<int> { 8, 6 };
List<int> lstStudentId = Students
    .GroupBy(s => s.StudentId)
    // 验证筛选列表中的每个班级,该学生都有对应的关联记录
    .Where(g => filterClassId.All(targetClass => g.Any(student => student.ClassId == targetClass)))
    .Select(g => g.Key)
    .ToList();

方案二:通过交集匹配数量验证

List<int> filterClassId = new List<int> { 8, 6 };
List<int> lstStudentId = Students
    .GroupBy(s => s.StudentId)
    // 去重后取学生班级与筛选班级的交集,确保交集数量等于筛选班级总数
    .Where(g => g.Select(s => s.ClassId).Distinct().Intersect(filterClassId).Count() == filterClassId.Count)
    .Select(g => g.Key)
    .ToList();

两种方案最终都会得到预期结果:[1, 3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:13:19