LINQ:Select

C#中的 select 是 LINQ 查询里的核心关键字,主要用来‌从数据集合里挑选或转换出想要的新数据‌,它既可以用在‌查询表达式‌中,也可以作为 ‌Select() 方法‌直接调用 。可以参考微软官方的 select 子句参考 和 Enumerable.Select 方法 获取详细文档。‌‌‌

一、C#里用 select 主要有两种写法,效果一样:

‌1、查询表达式写法‌:

这种写法有点像 SQL 语句,select 通常放在整句的‌最后面‌。

from 变量 in 集合 where 条件 select 变量.属性‌‌‌

比如想从一堆分数里挑出大于 80 分的:

from score in scores where score > 80 select score‌‌‌

‌2、方法语法写法‌:

这种是直接用点号调用 .Select() 方法,配合 Lambda 表达式(就是那个 => 符号)来写逻辑。

集合.Select(变量 => 变量.属性)‌‌‌

同样的挑分数例子,写成方法就是:

scores.Where(score => score > 80).Select(score => score)‌‌‌

二、select 能干什么

select 的核心任务是把旧数据"投影"成新形式,输入几个元素,输出就是几个新元素,数量不会变 。常见的使用场景有:‌‌‌

‌只要特定字段‌:比如有一堆学生对象,只想要他们的名字,就可以 select s.Name 。

‌计算新数值‌:比如给所有商品价格打八折,可以 select p.Price * 0.8 。

‌构造新对象‌:可以把多个字段拼成一个临时的匿名对象,比如 select new { s.Name, s.Age },这样拿到的结果里就只包含这两个属性 。

‌带上索引转换‌:Select 方法允许你同时拿到元素和它的序号,写法是 (item, index) => ...,适合需要知道数据排第几的场景 。‌‌‌

需要注意的是,select 查询定义的时候不会马上执行,只有当真正去遍历结果(比如用 foreach 或转成 List)时,它才会真正跑起来,这叫‌延迟执行‌ 。‌‌‌

三、和 SelectMany、Where 有啥不同

新手容易把 select 和另外两个常用方法搞混,区分清楚能少写很多 bug:

1、 ‌select 与 Where‌:

Where 是用来‌筛选‌的,决定哪些数据要留下来,返回的是布尔值(真/假)。
select 是用来‌转换‌的,决定留下来的数据长什么样,返回的是新对象 。

简单说:Where 管"要不要",select 管"变成啥"。‌‌‌

2、 ‌select 与 SelectMany‌:

select 是‌一对一‌的,一个输入对应一个输出,列表长度不变 。

SelectMany 是‌一对多‌的,专门用来处理嵌套集合(比如订单里有多个商品),它会把里面的小列表全部"铺平"成一个大列表 。

如果发现结果里还套着一层列表,通常就该考虑用 SelectMany 而不是 select 了 。‌‌‌

相关推荐
波力海苔夹心脆67510 小时前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net
小羊没烦恼!15 小时前
在Scrum中实施敏捷建模
java·开发语言·windows·算法·c#
Lost of 程序猿16 小时前
建造者模式实战:告别“十参数构造函数“的数据导出任务
后端·设计模式·c#·asp.net
mudtools18 小时前
在.NET现有系统中快速集成飞书任务分配能力
后端·c#·.net
工具派21 小时前
Word文档太大怎么拆分?段落结构与两种拆法的边界实测
开发语言·c#·word
潜龙95271 天前
需求文档一键变测试用例:手工用例智能生成平台
开发语言·c#
Lost of 程序猿1 天前
命令模式实战:把“下单后的动作“打包成可执行的任务
后端·设计模式·c#·asp.net·命令模式
淡海水1 天前
16-01-C#数据结构源码-附录A-术语表
unity·c#·游戏引擎·il2cpp
小羊没烦恼!1 天前
【译】利用Asp.net MVC处理文件的上传下载
开发语言·缓存·c#·word·powerpoint·.net
波力海苔夹心脆6751 天前
C# 海康威视摄像头二次开发入门:HCNetSDK 登录、实时预览、云台控制、录像与抓图(WinForms 实战)
开发语言·windows·经验分享·tcp/ip·c#