清理你的 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 将是你经常会用到的工具!

Back to Blog

相关文章

阅读更多 »

C# Smart Enums:高级

封面图片:C Smart Enums:advanced https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-upload...

C# 智能枚举:优化版

问题:“LINQ 税” 在第 1 部分中,我们用 records 替换了魔法数字。为了查找特定的状态,我们使用了 LINQ:csharp var status = Status.All.SingleOrDe...

开启我的 C# .NET 之旅

引言 我还没有掌握 Python,但我决定把学习 C 和 .NET 作为下一步。在大学期间,我探索了几个程序…