List 投影转换Select作用 详解 示例一、什么是投影转换投影是 LINQ 里的核心概念对应方法就是Select()。简单说把集合里的每一个元素加工、转换、提取成新数据最终生成一个全新集合。List 本身只是存原始对象/值投影就是“数据重塑”提取字段、类型转换、拼接数据、生成新实体。二、核心作用只提取需要的字段过滤冗余字段减少数据传输/内存占用类型转换对象 → 字符串、数值、其他实体数据加工计算拼接、运算、格式化结构重组旧实体 → 新实体、匿名类区别于筛选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(){ListStudentstuListnewListStudent{newStudent{Id1,Name张三,Age18,Score90},newStudent{Id2,Name李四,Age19,Score85},newStudent{Id3,Name王五,Age18,Score96}};// 下面依次演示各类投影用法Console.ReadLine();}}1. 提取单个字段最常用只拿出姓名把ListStudent转为Liststring// 投影只取 NameListstringnameListstuList.Select(ss.Name).ToList();Console.WriteLine(string.Join(、,nameList));// 输出张三、李四、王五2. 提取多个字段 → 匿名类不想定义新实体临时组合多个字段vartempListstuList.Select(snew{编号s.Id,姓名s.Name,分数s.Score}).ToList();foreach(varitemintempList){Console.WriteLine($编号{item.编号}姓名{item.姓名});}3. 数据计算/加工对原有字段做运算、拼接、格式化// 拼接字符串 分数换算varinfoListstuList.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;}}// 投影转换为 DTOListStudentDtodtoListstuList.Select(snewStudentDto{StuIds.Id,StuNames.Name}).ToList();5. 结合 Where 先筛选、再投影组合用法先过滤元素再转换数据// 先筛选分数88再只取姓名varhighScoreNamesstuList.Where(ss.Score88).Select(ss.Name).ToList();Console.WriteLine(string.Join( ,highScoreNames));// 输出张三 王五四、关键特点总结不修改原集合投影会生成新集合原stuList数据完全不变。改变元素类型/结构可以对象 → 字符串/数值/新对象/匿名类。延迟执行LINQ 特性Select返回IEnumerableT调用 ToList()/ToArray() 才真正执行遍历。性能场景大数据场景下投影只取必要字段大幅节省内存比全对象传递更高效。五、一句话总结投影 Select 对集合中每一项做“改造、提取、转类型”产出新集合是数据封装、视图展示、实体转换中最常用的 LINQ 操作。