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

使用LINQ筛选与教师同城市国家的学生列表无循环实现方案

问题解决方法

报错原因说明

你第一种LINQ写法抛出类型转换异常的核心原因是:代码返回的是匿名类型的集合,如果你后续尝试将其强转为List<(Teacher, IEnumerable<Student>)>类型,就会触发转换错误——C#的匿名类型是编译器动态生成的独立类型,和你定义的值元组类型没有任何转换关系。

无显式循环的实现方案

直接用LINQ的Select方法将教师集合投影为你需要的元组集合即可,不需要手动写循环:

var result = teachers.Select(teacher => 
    (
        Teacher: teacher, 
        Students: students.Where(s => s.Country == teacher.Country && s.City == teacher.City).ToList()
    )
).ToList();

这个实现的运行逻辑和你现有的ForEach版本完全一致,底层由LINQ内部完成遍历,没有额外性能开销。

高性能优化方案(可选)

如果学生集合数据量较大,你可以先对学生按国家+城市分组建立索引,避免每次匹配都遍历全部学生,只需要遍历一次学生集合即可完成所有匹配:

// 按 国家+城市 为key建立学生分组索引
var studentCityLookup = students.ToLookup(s => new { s.Country, s.City });

var result = teachers.Select(teacher => 
    (
        Teacher: teacher,
        Students: studentCityLookup[new { teacher.Country, teacher.City }].ToList()
    )
).ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:24:02