惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
T
The Blog of Author Tim Ferriss
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
Engineering at Meta
Engineering at Meta
量子位
I
InfoQ
Jina AI
Jina AI
Microsoft Security Blog
Microsoft Security Blog
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
Google Developers Blog
J
Java Code Geeks
Recent Announcements
Recent Announcements
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
V
V2EX
腾讯CDC
P
Proofpoint News Feed
A
About on SuperTechFans
爱范儿
爱范儿
U
Unit 42
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI

博客园 - 漫思

python使用.env构建开发和生产环境 python项目的构建 nodejs构建CICD时的思考  成为 AI 智能体工程师的 10 个步骤 es6的 yield python 中的 yield 笔记本的A壳 thinkpad 更换 reduce() in Python python的字段赋值和取值的操作 python的语法类似于lodash分组展开,合并分组操作 lodash 数组的常用做法 lodash里面的常用方法 技术的边界 Reduce 和 Transduce 的含义 尤雨溪创办的 VoidZero 官宣加入 Cloudflare,前端 Vite 等保持开源 Ramda 函数库参考教程 ramda es 数组的方法 flatmap map object.entity的教程 Map与FlatMap:在数据处理中的区别与联系 flat、flatmap与map的用法区别1 flat、flatmap与map的用法区别 AI不是从天而降,它经历了七十年三起三落:读懂AI的第三课 Agent 17 种架构模式 分析 & 思考 只有踩过坑才懂:前端生成唯一 ID,别用 Date.now ()了!试试它crypto.randomUUID() FastAPI python并发 代码是 AI 写的,生产事故谁背锅? AI Agent 走出 Demo 幻觉的唯一解药:Harness Engineering 高管的 AI 精神病
SelectMany C#
漫思 · 2026-06-06 · via 博客园 - 漫思

SelectMany 是 LINQ 里“先映射,再拍平”的方法,核心作用是把“集合里的每个元素再对应一个子集合”合并成一个一维序列。

一句话理解:
Select 是一对一映射;
SelectMany 是一对多映射并把结果展开。

常见场景
1. 一个班级有多个学生,想拿到所有学生列表
2. 一个订单有多个明细,想拿到所有明细
3. 需要做“外层 + 内层”联合投影(例如 部门名 + 员工名)

基础示例(拍平)
List<List<int>> nums = new()
{
new() { 1, 2 },
new() { 3, 4, 5 }
};

var flat = nums.SelectMany(x => x);
// 结果: 1,2,3,4,5

对象示例(班级 -> 学生)
var classes = new[]
{
new { Name = "一班", Students = new[] { "张三", "李四" } },
new { Name = "二班", Students = new[] { "王五" } }
};

var allStudents = classes.SelectMany(c => c.Students);
// 结果: 张三, 李四, 王五

带结果投影(同时拿外层信息)
var pairs = classes.SelectMany(
c => c.Students,
(c, s) => new { ClassName = c.Name, StudentName = s }
);
// 结果:
// {ClassName=一班, StudentName=张三}
// {ClassName=一班, StudentName=李四}
// {ClassName=二班, StudentName=王五}

和 Select 的区别
1. Select 返回“每项映射后的序列”,如果映射到子集合,结果会是二维
2. SelectMany 会自动把这些子集合合成一维

语法糖对应(查询表达式)
from c in classes
from s in c.Students
select new { c.Name, s }

这段本质上就是 SelectMany。

如果你愿意,我可以下一条给你一个“最常见面试题”:Select、SelectMany、Join 三者该怎么选。