清理你的 C# 循环:使用 LINQ SelectMany 展平嵌套集合
发布: (2026年1月1日 GMT+8 02:42)
2 min read
原文: Dev.to
Source: Dev.to
介绍
你是否曾经处理过列表中的列表,并且为了获取数据而写出杂乱的嵌套 foreach 循环?在 C# 中,.SelectMany 操作符提供了一种优雅的方式来展平这些嵌套集合,使其成为单一、可用的流。
传统做法
var allItems = new List();
foreach (var order in orders)
{
foreach (var item in order.LineItems)
{
allItems.Add(item);
}
}
这能工作,但代码冗长,阅读时不够直观。
使用 SelectMany
var allItems = orders.SelectMany(o => o.LineItems).ToList();
SelectMany 会遍历每个父对象,获取其子集合,并将其展开为单个序列。
好处
- 可读性 – 你描述的是想要做什么,而不是如何循环。
- 可链式调用 – 你可以在
.SelectMany之后立即添加.Where()、.OrderBy()或其他 LINQ 操作符,以进一步细化数据,而无需再添加循环。
如果你正从循环密集的风格转向 .NET 中更函数式的写法,SelectMany 将是你经常会用到的工具!