C#中LINQ的Select与SelectMany函数使用

当我们需要对一个集合进行转换时,可以使用C#中的LINQ(Language Integrated Query)语句来实现。其中,LINQ中的Select和SelectMany函数就是用来做数据集合转换的。

Select函数

函数介绍

Select函数可以将集合中的每个元素转换为新的类型或值,并返回一个新的集合。Select函数的返回值类型为IEnumerable,其中TSource是集合元素的原始类型,而返回的是新的类型或值。

Select函数的方法签名如下:

public static IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TResult> selector
);

其中,source参数是要进行转换的集合,selector参数则是对每个元素进行转换的委托。

委托使用示例

下面是一个例子,假设有以下的Student类:

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public double Score { get; set; }
}

我们可以使用Select函数,将一个Student集合中每个元素的Name属性提取出来,返回一个新的字符串集合:

List<Student> students = new List<Student>()
{
    new Student { Name = "Tom", Age = 18, Score = 90 },
    new Student { Name = "Jerry", Age = 19, Score = 75 },
    new Student { Name = "Mike", Age = 20, Score = 85 },
    new Student { Name = "Lucy", Age = 18, Score = 95 }
};

List<string> names = students.Select(s => s.Name).ToList();

Lambda表达式使用示例

上述例子中selector参数使用了Lambda表达式,可以使用Lambda表达式更加方便地编写Select函数。Lambda表达式的格式如下:

source => expression

其中,source表示要转换的元素,而expression则是对元素进行转换的表达式。

SelectMany函数

函数介绍

SelectMany函数可以将嵌套的集合展开成一维集合,并且对展开后的每个元素进行转换。最后会返回一个新的集合。SelectMany函数的返回值类型为IEnumerable,其中TResult是转换后的类型。

SelectMany函数的方法签名如下:

public static IEnumerable<TResult> SelectMany<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, IEnumerable<TResult>> selector
);

委托使用示例

下面是一个例子,假设有以下的Teacher和Student类:

public class Teacher
{
    public string Name { get; set; }
    public List<Student> Students { get; set; }
}

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public double Score { get; set; }
}

我们可以使用SelectMany函数,将一个包含多个Teacher对象的集合,展开成一个包含所有Student对象的一维集合,并返回一个新的Student集合:

List<Teacher> teachers = new List<Teacher>()
{
    new Teacher 
    { 
        Name = "Teacher1", 
        Students = new List<Student>() 
        { 
            new Student { Name = "Tom", Age = 18, Score = 90 },
            new Student { Name = "Jerry", Age = 19, Score = 75 }
        }
    },
    new Teacher 
    { 
        Name = "Teacher2", 
        Students = new List<Student>() 
        { 
            new Student { Name = "Mike", Age = 20, Score = 85 },
            new Student { Name = "Lucy", Age = 18, Score = 95 }
        }
    }
};

List<Student> students = teachers.SelectMany(t => t.Students).ToList();

结果集合中包含了所有的Student对象:

Tom, Jerry, Mike, Lucy

其中,第一步使用SelectMany函数将每个Teacher对象的Students属性展开成一个一维集合;

第二步再使用Select函数,将每个元素的Name属性提取出来转换成字符串。

List<string> names = teachers.SelectMany(t => t.Students).Select(s => s.Name).ToList();

结果集合中包含了所有Student的Name属性:

Tom, Jerry, Mike, Lucy

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中LINQ的Select与SelectMany函数使用 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C# Convert.ToDouble()方法: 将指定的值转换为双精度浮点数

    Convert.ToDouble() 方法是 C# 中用于将指定对象转换为双精度浮点数的方法。该方法属于 System 命名空间下的 Convert 类,可以将字符串、整数等数据类型转换为双精度浮点数。其基本语法如下: Double Convert.ToDouble(Object value); 其中,value 参数类型为 Object,表示需要转换为双精…

    C# 2023年4月19日
    00
  • Unity TextMeshPro实现富文本超链接默认字体追加字体

    下面是关于“Unity TextMeshPro 实现富文本超链接默认字体追加字体”的完整攻略: 背景介绍 在 Unity 项目中,TextMeshPro 是一款很常用的文本 UI 组件。它支持富文本、超链接、字体嵌入等功能,并且相比 Unity 自带的 Text 组件,TextMeshPro 更加易用、性能更好。我们在项目中经常需要使用到富文本超链接,但默认…

    C# 2023年6月3日
    00
  • C#如何连接服务器共享文件夹

    连接服务器共享文件夹是C#程序开发中非常常见的需求,以下是连接服务器共享文件夹的完整攻略: 确定共享文件夹的路径 在连接服务器共享文件夹之前,需要确定共享文件夹的路径。共享文件夹通常是基于服务器的网络共享,因此需要访问服务器的网络位置,例如: \\servername\sharedfolder 其中,servername表示服务器的名称或IP地址,share…

    C# 2023年6月6日
    00
  • C# EF Core可视化工具的使用及EF Core入门语句操作代码

    让我来详细讲解一下 “C# EF Core可视化工具的使用及EF Core入门语句操作代码” 的完整攻略。 EF Core简介 EF(Core)是一个轻量级的ORM框架,它的主要功能是将对象模型映射到关系数据库中,以及从数据库中获取和存储数据。 EF Core可视化工具的使用 EF Core可视化工具可以方便地管理 EF Core 的各种功能,比如数据库迁移…

    C# 2023年6月3日
    00
  • javascript入门之数组[新手必看]

    JavaScript入门之数组[新手必看] 简介 数组(Array)在JavaScript中是一种常用数据类型,能够轻松地存储和访问多个元素。本文章将介绍如何定义、访问、操作以及常用的数组方法。 定义数组 定义数组的方式有多种,其中最常用的方式是使用方括号([])来包裹数组元素,每个元素之间使用逗号(,)隔开。如下所示: // 定义一个包含3个元素的数组 v…

    C# 2023年6月7日
    00
  • asp.net中C#获取字符串中汉字的个数的具体实现方法

    要想在ASP.NET中使用C#获取字符串中汉字的个数,一般可以使用以下两种方法: 方法一:借助正则表达式 通过正则表达式可以轻易地匹配出中文字符,从而获取到中文字符的个数。具体实现方法如下: using System.Text.RegularExpressions; public int GetChineseCount(string str) { Regex…

    C# 2023年6月3日
    00
  • .NET Core跨平台串口通讯使用SerialPortStream基础类库问题解决

    .NET Core跨平台串口通讯使用SerialPortStream基础类库问题解决 串口通讯在很多行业应用中都有着重要的地位,而串口通讯的跨平台解决方案在.NET Core 3.0之后,就有了更好的支持。本文将介绍如何使用SerialPortStream基础类库进行.NET Core跨平台串口通讯,并解决其中的常见问题。 安装SerialPortStrea…

    C# 2023年6月3日
    00
  • 关于.NET异常处理的思考总结

    以下是关于.NET异常处理的思考总结的攻略: 1. 前言 .NET是一种广泛使用的编程框架,用于开发各种类型的应用程序。在开发应用程序时,很难避免不出现错误和异常。为了确保应用程序正常运行,必须合理处理这些异常。本文将探讨.NET异常处理的思考总结。 2. 异常的基本概念 异常是指在应用程序中出现的意外结果或错误,也称为运行时错误或未处理异常。异常通常由编程…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部