C# LINQ SelectMany方法详解

 更新时间:2026年01月09日 10:44:17   作者:Xioa.  
SelectMany 是 LINQ 中用于展平集合的强大操作符,本文就来详细的介绍一下C# LINQ SelectMany方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

SelectMany 是 LINQ 中用于展平集合的强大操作符。让我们详细了解它的使用

1. 基本用法

// 基础示例
var lists = new List<List<int>> {
    new List<int> { 1, 2, 3 },
    new List<int> { 4, 5, 6 }
};

var flattened = lists.SelectMany(x => x);
// 结果: [1, 2, 3, 4, 5, 6]

2. 带索引的 SelectMany

var result = lists.SelectMany((list, index) => 
    list.Select(item => $"列表{index}: {item}"));

3. 实际应用场景

一对多关系展平

public class Student
{
    public string Name { get; set; }
    public List<Course> Courses { get; set; }
}

// 获取所有学生的所有课程
var allCourses = students.SelectMany(s => s.Courses);

// 带学生信息的课程列表
var studentCourses = students.SelectMany(
    student => student.Courses,
    (student, course) => new { 
        StudentName = student.Name, 
        CourseName = course.Name 
    }
);

字符串处理

string[] words = { "Hello", "World" };
var letters = words.SelectMany(word => word.ToLower());
// 结果: ['h','e','l','l','o','w','o','r','l','d']

4. 查询语法

// 方法语法
var result = students.SelectMany(s => s.Courses);

// 等价的查询语法
var result = from student in students
            from course in student.Courses
            select course;

5. 高级用法

条件过滤

var result = students.SelectMany(
    student => student.Courses.Where(c => c.Credits > 3),
    (student, course) => new {
        Student = student.Name,
        Course = course.Name,
        Credits = course.Credits
    });

多层展平

var departments = new List<Department>();
var result = departments
    .SelectMany(d => d.Teams)
    .SelectMany(t => t.Employees);

注意事项

性能考虑

- SelectMany 会创建新的集合
- 大数据量时注意内存使用
- 考虑使用延迟执行

 空值处理

// 处理可能为null的集合
var result = students.SelectMany(s => 
    s.Courses ?? Enumerable.Empty<Course>());

常见错误
- 忘记处理空集合
- 嵌套 SelectMany 过深
- 返回类型不匹配

 SelectMany 在处理嵌套集合、一对多关系时非常有用,掌握它可以大大简化复杂数据处理的代码

到此这篇关于C# LINQ SelectMany方法详解的文章就介绍到这了,更多相关C# LINQ SelectMany内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 基于WPF开发txt阅读器

    基于WPF开发txt阅读器

    这篇文章主要为大家详细介绍了如何基于WPF开发一个简单的txt阅读器,可以满足文本文件的读写和保存,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • C#设置输入法实例分析

    C#设置输入法实例分析

    这篇文章主要介绍了C#设置输入法的方法,实例分析了C#获取系统输入法及设置输入法的相关技巧,需要的朋友可以参考下
    2015-05-05
  • C# 多线程学习之基础入门

    C# 多线程学习之基础入门

    线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。今天小编就带大家了解一下C#中的多线程,快来学习一下吧
    2021-12-12
  • Unity3D自定义创建圆锥体

    Unity3D自定义创建圆锥体

    这篇文章主要为大家详细介绍了Unity3D自定义创建圆锥体,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C#保存listbox中数据到文本文件的方法

    C#保存listbox中数据到文本文件的方法

    这篇文章主要介绍了C#保存listbox中数据到文本文件的方法,涉及C#操作listbox数据的相关技巧,需要的朋友可以参考下
    2015-04-04
  • C# 特性AttributeUsage简介与使用教程

    C# 特性AttributeUsage简介与使用教程

    这篇文章主要介绍了C# 特性AttributeUsage简介与使用教程,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • C#中的异常处理问题try catch finally

    C#中的异常处理问题try catch finally

    这篇文章主要介绍了C#中的异常处理问题try catch finally,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • C#实现提高xml读写速度的方法

    C#实现提高xml读写速度的方法

    这篇文章主要介绍了C#实现提高xml读写速度的方法,并且针对各类文件的读写做了较为细致的分析,非常实用,需要的朋友可以参考下
    2014-11-11
  • C#中Json字符串的各种应用类实例讲解

    C#中Json字符串的各种应用类实例讲解

    这篇文章主要介绍了C#中Json字符串的各种应用类实例讲解的相关资料,需要的朋友可以参考下
    2015-10-10
  • C# WinForm程序完全退出的问题解决

    C# WinForm程序完全退出的问题解决

    C# WinForm程序完全退出的问题解决,需要的朋友可以参考一下
    2013-05-05

最新评论