当前位置: 首页 > news >正文

List<T> 投影转换(Select)作用 + 详解 + 示例

List 投影转换(Select)作用 + 详解 + 示例

一、什么是投影转换

投影是 LINQ 里的核心概念,对应方法就是Select()
简单说:把集合里的每一个元素,加工、转换、提取成新数据,最终生成一个全新集合

List 本身只是存原始对象/值,投影就是“数据重塑”:提取字段、类型转换、拼接数据、生成新实体。


二、核心作用

  1. 只提取需要的字段(过滤冗余字段,减少数据传输/内存占用)
  2. 类型转换(对象 → 字符串、数值、其他实体)
  3. 数据加工计算(拼接、运算、格式化)
  4. 结构重组(旧实体 → 新实体、匿名类)

区别于筛选(Where删元素):

  • Where:过滤元素个数
  • Select:改变元素内容/类型

三、分类示例(C#7.3 可直接运行)

准备基础实体与测试数据:

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;// 原始实体publicclassStudent{publicintId{get;set;}publicstringName{get;set;}publicintAge{get;set;}publicdecimalScore{get;set;}}classProgram{staticvoidMain(){List<Student>stuList=newList<Student>{newStudent{Id=1,Name="张三",Age=18,Score=90},newStudent{Id=2,Name="李四",Age=19,Score=85},newStudent{Id=3,Name="王五",Age=18,Score=96}};// 下面依次演示各类投影用法Console.ReadLine();}}

1. 提取单个字段(最常用)

只拿出姓名,把List<Student>转为List<string>

// 投影:只取 NameList<string>nameList=stuList.Select(s=>s.Name).ToList();Console.WriteLine(string.Join("、",nameList));// 输出:张三、李四、王五

2. 提取多个字段 → 匿名类

不想定义新实体,临时组合多个字段:

vartempList=stuList.Select(s=>new{编号=s.Id,姓名=s.Name,分数=s.Score}).ToList();foreach(varitemintempList){Console.WriteLine($"编号:{item.编号}姓名:{item.姓名}");}

3. 数据计算/加工

对原有字段做运算、拼接、格式化:

// 拼接字符串 + 分数换算varinfoList=stuList.Select(s=>$"姓名:{s.Name},总分折合:{s.Score*1.1m:F1}").ToList();foreach(varinfoininfoList){Console.WriteLine(info);}

4. 转换为全新实体

业务分层常用:数据库实体 → 页面展示实体(VO/DTO)

// 定义展示实体publicclassStudentDto{publicintStuId{get;set;}publicstringStuName{get;set;}}// 投影转换为 DTOList<StudentDto>dtoList=stuList.Select(s=>newStudentDto{StuId=s.Id,StuName=s.Name}).ToList();

5. 结合 Where 先筛选、再投影(组合用法)

先过滤元素,再转换数据:

// 先筛选分数>88,再只取姓名varhighScoreNames=stuList.Where(s=>s.Score>88).Select(s=>s.Name).ToList();Console.WriteLine(string.Join(" ",highScoreNames));// 输出:张三 王五

四、关键特点总结

  1. 不修改原集合
    投影会生成新集合,原stuList数据完全不变。
  2. 改变元素类型/结构
    可以对象 → 字符串/数值/新对象/匿名类
  3. 延迟执行(LINQ 特性)
    Select返回IEnumerable<T>调用 ToList()/ToArray() 才真正执行遍历
  4. 性能场景
    大数据场景下,投影只取必要字段,大幅节省内存,比全对象传递更高效。

五、一句话总结

投影 Select = 对集合中每一项做“改造、提取、转类型”,产出新集合,是数据封装、视图展示、实体转换中最常用的 LINQ 操作。

http://www.jsqmd.com/news/899438/

相关文章:

  • 双重引擎:量子计算与AI如何将人类文明推向恒星时代
  • 2026毕业季降AI软件红黑榜:4款工具一次过知网维普AIGC - 我要发一区
  • 杰理AC696N蓝牙音频芯片开发TWS真无线立体声-开发指南(上):使能与配对配置
  • 终极鼠标加速指南:Raw Accel 7大曲线类型深度解析与实战配置
  • Figma的组件系统是如何工作的?
  • Figma组件系统的优势有哪些?
  • 嵌入式 - 数据结构与算法:(1-14)排序算法 - 冒泡/选择/快速/希尔排序对比
  • 2026实测横评:无水印视频下载神器怎么选?免费好用的无水印视频下载工具有哪些?6大维度深度对比 - 科技热点发布
  • 战略落地难?别让“空中楼阁”拖垮你的团队
  • 《原神》剧情又长又不能跳?试试这款开源免费“自动跳过”神器 | 支持6.6版本
  • Windows系统hid.dll文件丢失找不到问题解决
  • 2026年包头吊车租赁/吊车包月/吊车台班出租TOP榜单:全吨位吊装设备厂家优选与重型租赁服务深度解析 - 品牌企业推荐师(官方)
  • 2026年全国跨境POD定制系统优选服务商深度评测:从“制造”到“智造”,谁在定义柔性供应链的未来? - 资讯纵览
  • 从图纸到模型:SolidWorks Electrical 如何打通电气设计的“任督二脉”
  • 3分钟学会强制调整窗口大小:告别无法缩放的烦恼
  • 2026年泉州外贸推广公司十大服务商评测:乐振科技凭“询盘兜底”成黑马,AI搜索时代谁在真帮企业拿订单? - 资讯纵览
  • 论文降AI率4款工具对比:2026年5月知网维普AI痕迹实测 - 我要发一区
  • Ansys学习-静力学-day4
  • 基于调制运动模糊的车辆速度估计:WDPMVA算法与MOIM硬件设计
  • 手把手教你注册GitHub账号——开启开源世界的第一步
  • 别再用老掉牙的猫狗数据集了!用TensorFlow 2.1+Python 3.6,从数据清洗到模型调优的完整避坑指南
  • VIVADO AXI DMA SG模式实战:从描述符链表到高速数据流环通
  • 2026西安碑林区财税咨询机构怎么选?3家本地靠谱机构实测对比! - 小柏云
  • 一物一码防窜货系统哪家强?看这几个能力维度 - 纳宝科技一物一码
  • 4款主流降AI工具知网维普实测对比:2026年5月降AI率排行榜 - 我要发一区
  • 2026年烟台职教高考技工学校排行:合规与实力双维度盘点 烟台职教高考学校排名 2026 - 奔跑123
  • 视频去水印方法大全:手机电脑哪款软件好用?2026实测免费安全推荐 - 体验家
  • 为什么你的提问总被帮助中心“忽略”?揭秘ChatGPT知识库匹配逻辑与4步精准提问公式
  • 2026年 钢结构厂家/工程公司推荐榜单:辽宁/吉林钢结构施工,车间与建筑项目实力优选! - 品牌企业推荐师(官方)
  • 一个在线模拟GET,POST,PUT,DELET请求的HTTP在线接口测试工具