C#进阶高级语法之LINQ :Lambda 表达式
C# 中的 LINQ (Language Integrated Query) 提供了一种声明性的数据查询和操作方法,它允许开发人员对集合、数据库等数据源进行查询和操作,而不需要编写复杂的循环和手动编码。Lambda 表达式与 LINQ 紧密相关,它提供了一种简洁的方式来定义匿名函数。
Lambda 表达式在 LINQ 中经常用于定义查询中的行为,比如在 Where、Select 和 OrderBy 等查询操作中。
1. Lambda表达式基础
Lambda表达式是一种简洁的匿名函数表示形式,可以作为方法引用的替代品。它通常有以下形式:
(input-parameters) => expression
如果只有一个参数,可以省略参数列表和括号:
x => expression
Lambda表达式可以包含多个参数,甚至可以包含语句。例如:
(x, y) => x + y
2. LINQ中使用Lambda表达式
在LINQ查询中,Lambda表达式常用于定义查询中的行为,如Where、Select、OrderBy等操作。下面我们将通过一些示例来介绍Lambda表达式在LINQ中的应用。
2.1. 使用Lambda表达式进行Where查询
假设有一个学生对象的列表,每个学生有Name和Age属性。
List<Student> students = new List<Student>
{new Student { Name = "张三", Age = 20 },new Student { Name = "李四", Age = 22 },// ... 其他学生
};
我们可以使用Lambda表达式进行Where查询,筛选出年龄小于21岁的学生:
var youngStudents = students.Where(s => s.Age < 21);
2.2. 使用Lambda表达式进行Select查询
同样,我们可以使用Lambda表达式进行Select查询,获取每个学生的名字:
var studentNames = students.Select(s => s.Name);
2.3. 使用Lambda表达式进行OrderBy和ThenBy查询
我们还可以使用Lambda表达式进行OrderBy和ThenBy查询,根据年龄和名字对 students 进行排序:
var sortedStudents = students.OrderBy(s => s.Age).ThenBy(s => s.Name);
这里第一个 Lambda 表达式 s => s.Age 定义了根据年龄排序的准则,第二个 Lambda 表达式 s => s.Name 定义了当年龄相同时,按名字排序的准则。
3. Lambda表达式和Action委托
Lambda表达式也可以用来创建Action委托,例如在foreach循环中使用Action委托。
foreach (var student in students)
{student.PrintStudentInfo(); // 假设学生类有一个这样的方法
}// 或者使用Lambda表达式来简化
students.ForEach(student => student.PrintStudentInfo());
4. Lambda表达式和Func委托
Func委托用于返回结果的匿名函数。例如,我们从学生列表中获取一个年龄大于20岁的学生的名字:
var studentName = students.FirstOrDefault(s => s.Age > 20).Name;
5. 如何使用LINQ和Lambda表达式结合进行查询
在C#中,我们可以使用LINQ和Lambda表达式结合进行查询,例如对一个整数列表进行排序和筛选。下面是一个示例:
using System;
using System.Collections.Generic;
using System.Linq;
namespace LINQLambdaExample
{class Program{static void Main(string[] args){List<int> numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };// 使用LINQ和Lambda表达式进行查询var sortedNumbers = numbers.OrderBy(n => n).ThenBy(n => n);// 输出查询结果foreach (var number in sortedNumbers){Console.WriteLine(number);}}}
}
在上面的示例中,我们首先创建了一个整数列表numbers,然后使用LINQ查询对其进行排序。在OrderBy方法中,我们使用Lambda表达式n => n作为排序条件,实现从小到大排序。接着,我们使用ThenBy方法再次进行排序,这里同样使用了Lambda表达式n => n作为排序条件,实现从大到小排序。最后,我们遍历查询结果并输出。
6. 示例代码演示LINQ和Lambda表达式在实际应用中的使用
下面是一个使用LINQ和Lambda表达式操作List集合的示例:
using System;
using System.Collections.Generic;
using System.Linq;namespace LINQLambdaExample
{class Program{static void Main(string[] args){// 创建一个学生列表List<Student> students = new List<Student>{new Student { Name = "张三", Age = 18, Grade = 90 },new Student { Name = "李四", Age = 19, Grade = 85 },new Student { Name = "王五", Age = 20, Grade = 92 },new Student { Name = "赵六", Age = 17, Grade = 88 },};// 使用LINQ和Lambda表达式查询年龄大于18岁的学生var queryResult = students.Where(s => s.Age > 18);// 输出查询结果foreach (var student in queryResult){Console.WriteLine($"姓名:{student.Name}, 年龄:{student.Age}, 成绩:{student.Grade}");}}}class Student{public string Name { get; set; }public int Age { get; set; }public int Grade { get; set; }}
}
在这个示例中,我们首先创建了一个Student类,表示学生信息。然后创建了一个students列表,包含四个学生对象。接下来,我们使用LINQ查询students列表,筛选出年龄大于18岁的学生。在Where方法中,我们使用Lambda表达式s => s.Age > 18作为筛选条件。最后,我们遍历查询结果并输出。
在这个示例中,我们可以看到LINQ和Lambda表达式如何简化代码,使得数据查询和处理更加清晰和简洁。
总结
本文介绍了C#中LINQ和Lambda表达式的定义、用途和如何结合使用。通过示例代码,我们看到了LINQ和Lambda表达式在实际应用中的优势,包括简洁的语法和强大的功能。掌握这两个概念对于希望提高C#编程技能的开发者来说至关重要。
相关文章:
C#进阶高级语法之LINQ :Lambda 表达式
C# 中的 LINQ (Language Integrated Query) 提供了一种声明性的数据查询和操作方法,它允许开发人员对集合、数据库等数据源进行查询和操作,而不需要编写复杂的循环和手动编码。Lambda 表达式与 LINQ 紧密相关,它提供了一种简洁的方式来定义匿…...
react hook: useCallback
useCallback的主要使用场景在于优化性能,并确保当传递回调函数给子组件时,子组件不会因为父组件的重渲染而重新创建函数。 使用场景 1.当你需要将回调函数传递给子组件时,使用useCallback可以确保子组件在重新渲染时不会不必要地重新创建函数…...
java面试(jvm)
JVM内存模型 细分Eden: java类加载过程?双亲委派机制?一个对象从加载到JVM,再到被GC清除过程? JAVA类加载器:AppClassLoader - ExtClassLoader - BootStrapClassLoader。每种类加载器都有他自己的加载目录…...
自动化测试摸索:python+selenium+pytest(持续更新.....)
一、环境搭建 1、python 安装 下载链接:Python Releases for Windows | Python.org 自己选择合适的版本下载 当下载完毕时,找到该安装程序:python-3.12.2-amd64.exe文件,双击启动安装向导。 为了防止C:盘文件因系统故障或者无…...
C++惯用法之RAII思想: 资源管理
C编程技巧专栏:http://t.csdnimg.cn/eolY7 目录 1.概述 2.RAII的应用 2.1.智能指针 2.2.文件句柄管理 2.3.互斥锁 3.注意事项 3.1.禁止复制 3.2.对底层资源使用引用计数法 3.3.复制底部资源(深拷贝)或者转移资源管理权(移动语义) 4.RAII的优势和挑战 5.总…...
矢量图是什么,有哪些格式的文件
矢量图是一种图形设计中常用的图像类型,与我们日常见到的光栅图像(如JPEG、PNG等)有本质的区别。矢量图基于数学方程和几何元素(如点、线、曲线和形状)来表示图像,而不是像光栅图那样通过像素阵列来表示。这…...
Linux 设置快捷命令
以ll命令为例: 在 Linux 系统上,ll 命令通常不是一个独立的程序,而是 ls 命令的一个别名。 这个别名通常在用户的 shell 配置文件中定义,比如 .bashrc 或 .bash_aliases 文件中。 要在 Debian 上启用 ll 命令,你可以按…...
SpringCloudFeign远程调用
文章目录 1. Feign 是什么2. Feign 的使用2.1 引入依赖2.2 写接口2.3 服务调用方2.4 启动测试 3. Feign 日志配置4. Feign 使用优化5. 注意包扫描问题 1. Feign 是什么 Feign 是一个声明式、模板化的 HTTP 客户端,它是由 Netflix 开发并开源的。Feign 极大地简化了…...
Java中List、Set、Map三种集合之间的区别
Java中List、Set、Map三种集合之间的区别 1. List2. Set3. Map 在Java中,List、Set和Map是三种常见的集合类型,它们之间也有一些重要的区别: 1. List List是有序集合,可以存储重复元素。List的实现类常见有ArrayList、LinkedLis…...
SpringMVC之DispatcherServlet组件
目录 一、SpringMVC的核心处理流程二、DispatcherServlet1、init()方法2、doDispatch()方法3、AbstractAnnotationConfigDispatcherServletInitializer类 一、SpringMVC的核心处理流程 请求到达 DispatcherServlet DispatcherServlet 的请求处理: DispatcherServlet…...
抢商家、夺用户、比低价,抖音、快手、小红书“奇招尽出”
随着流量红利逐渐消退,国内电商平台之间互相内卷已成为了行业常态,而无论是在该领域深耕已久的淘宝、京东、拼多多等电商巨头,还是新跨界而来的抖音、快手、小红书等电商新秀都在不断地进行创新,以便为商家提供更好的服务…...
ChatGPT引领的AI面试攻略系列:AI全栈工程师篇
系列文章目录 AI全栈工程师(本文) 文章目录 系列文章目录一、前言二、面试题1. 基础理论与数据处理2. 机器学习3. 深度学习4. 大模型与迁移学习5. 计算机视觉6. 自然语言处理(NLP)7. 多模态学习8. AI生成内容(AIGC&am…...
上位机图像处理和嵌入式模块部署(qmacvisual配置)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们谈到了qmacvisual的编译、验证码、用户登录以及流程的编辑,这部分都是基础工作。事实上,除了这些内容之外…...
EXPLAIN PLAN FOR:在Oracle中生成执行计划
目录 案例 解析 Operation类型 在Oracle中,可以使用 EXPLAIN PLAN FOR 命令来生成执行计划,然后通过 SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY(PLAN_TABLE))来查看执行计划。需要注意的是,这两个命令需要在同一个窗口下运…...
蓝桥杯 9241.飞机降落
这道题本来作者以为是可以用一些小技巧进行暴力解法的,但是后来试了一下,不能过去全部数据。 下面是对半个的题解: #include<iostream> #include<stdio.h> #include<cstring> #include<cstdlib> #include<cmath…...
数据可视化原理-腾讯-散点图
在做数据分析类的产品功能设计时,经常用到可视化方式,挖掘数据价值,表达数据的内在规律与特征展示给客户。 可是作为一个产品经理,(1)如果不能够掌握各类可视化图形的含义,就不知道哪类数据该用…...
深度学习-Pytorch实现经典AlexNet网络:山高我为峰
深度学习-Pytorch实现经典AlexNet网络之山高我为峰 深度学习中,经典网络引领一波又一波的技术革命,从LetNet到当前最火的GPT所用的Transformer,它们把AI技术不断推向高潮。2012年AlexNet大放异彩,它把深度学习技术引领第一个高峰…...
25考研习题记录
3月 汤家凤《1800》 基础篇 日期高等数学线性代数概率论3.1 P92-93 P212-214 3.4 P10-15 P10-19 极限题62题 P73-74 P170-172 行列式17题 考研竞赛凯哥每日一题 张宇高数30讲页数3.4P74...
上海计算机学会 2023年12月月赛 丙组T4 迷宫(宽度优先搜索)
第四题:T4迷宫 标签:宽度优先搜索题意:给定 n n nx m m m由 # \# #(墙)、 . . .(空地)组成的地图,求从左上角到右下角的最少步数,每次只允许上下左右移动一格࿰…...
【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建
🌈欢迎来到C项目专栏 🙋🏾♀️作者介绍:前PLA队员 目前是一名普通本科大三的软件工程专业学生 🌏IP坐标:湖北武汉 🍉 目前技术栈:C/C、Linux系统编程、计算机网络、数据结构、Mysq…...
比较器参数实测对比:LM393 vs LM311 vs MAX902(附测试数据)
比较器参数实测对比:LM393 vs LM311 vs MAX902(附测试数据) 在电子设计领域,比较器作为信号处理的关键元件,其性能直接影响系统的响应速度和精度。面对市面上琳琅满目的比较器型号,工程师们常常陷入选择困境…...
OpenClaw对接Qwen3.5-9B实战:5步完成本地AI助手部署
OpenClaw对接Qwen3.5-9B实战:5步完成本地AI助手部署 1. 为什么选择OpenClawQwen3.5-9B组合? 去年冬天第一次听说OpenClaw时,我正在为重复性的文件整理工作头疼。作为技术博主,每天要处理几十个Markdown草稿、截图和参考文献&…...
小团队协作方案:OpenClaw+Phi-3-vision共享知识库搭建
小团队协作方案:OpenClawPhi-3-vision共享知识库搭建 1. 为什么我们需要一个共享知识库 上周三晚上11点,我正试图从微信聊天记录里翻找三个月前的产品设计图。团队的设计师小A在飞书上发过最终版,但后来小B又迭代过一版,而我电脑…...
OpenClaw技能扩展实战:用Gemma-3-12b-it自动生成技术博客并发布
OpenClaw技能扩展实战:用Gemma-3-12b-it自动生成技术博客并发布 1. 为什么需要自动化内容生产 上周我连续熬了三个晚上写技术博客,每次都是深夜对着屏幕敲键盘到凌晨两点。第三天早上开会时,我突然意识到一个问题:为什么不让AI帮…...
递归封神!二叉树两大究极考题:路径总和 III + 最近公共祖先|面试原地 AC
目录 前言 一、路径总和 III:任意起点、任意终点的路径计数 思路一句话总结 完整 AC 代码 关键点小白精讲 二、二叉树的最近公共祖先:后序遍历的神级应用 思路一句话总结 完整 AC 代码 小白秒懂逻辑 三、两道题核心思想总结 路径总和 III 最近…...
Minimal Agent 能力与技术架构深度解析
📘 Minimal Agent 能力与技术架构深度解析 第一章:Minimal Agent 的定位与核心价值 Minimal Agent 是一个 “极简操作系统控制代理”,其设计哲学在于去繁就简、直达底层。它通过创新的双模式架构,将大语言模型的通用能力与操作系统…...
2025届最火的十大AI写作神器实际效果
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 降低AIGC也就是人工智能生成内容的痕迹,其关键要点在于,减少模式化表…...
PG25664CG车载显示驱动深度解析:ASIL-B级TFT-LCD驱动架构与DSI/LVDS移植实践
PG25664CG 是一款专为大众汽车集团(Volkswagen Group)CARIAD 软件平台定制的嵌入式 TFT-LCD 显示驱动解决方案,面向车载信息娱乐系统(IVI)、数字仪表盘(Digital Cluster)及 HUD 控制单元等高可靠…...
终极团队协作利器:Synthwave ‘84主题如何实现多人开发环境一致性
终极团队协作利器:Synthwave 84主题如何实现多人开发环境一致性 【免费下载链接】synthwave-vscode Synthwave inspired colour theme for VS Code 🌅🕶 项目地址: https://gitcode.com/gh_mirrors/sy/synthwave-vscode 在现代软件开…...
终极指南:如何为NSFWJS集成Sentry实现高效错误监控与异常跟踪
终极指南:如何为NSFWJS集成Sentry实现高效错误监控与异常跟踪 【免费下载链接】nsfwjs NSFW detection on the client-side via TensorFlow.js 项目地址: https://gitcode.com/gh_mirrors/ns/nsfwjs NSFWJS是一个基于TensorFlow.js的客户端不良内容检测库&am…...
