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

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) 提供了一种声明性的数据查询和操作方法&#xff0c;它允许开发人员对集合、数据库等数据源进行查询和操作&#xff0c;而不需要编写复杂的循环和手动编码。Lambda 表达式与 LINQ 紧密相关&#xff0c;它提供了一种简洁的方式来定义匿…...

react hook: useCallback

useCallback的主要使用场景在于优化性能&#xff0c;并确保当传递回调函数给子组件时&#xff0c;子组件不会因为父组件的重渲染而重新创建函数。 使用场景 1.当你需要将回调函数传递给子组件时&#xff0c;使用useCallback可以确保子组件在重新渲染时不会不必要地重新创建函数…...

java面试(jvm)

JVM内存模型 细分Eden&#xff1a; java类加载过程&#xff1f;双亲委派机制&#xff1f;一个对象从加载到JVM&#xff0c;再到被GC清除过程&#xff1f; JAVA类加载器&#xff1a;AppClassLoader - ExtClassLoader - BootStrapClassLoader。每种类加载器都有他自己的加载目录…...

自动化测试摸索:python+selenium+pytest(持续更新.....)

一、环境搭建 1、python 安装 下载链接&#xff1a;Python Releases for Windows | Python.org 自己选择合适的版本下载 当下载完毕时&#xff0c;找到该安装程序&#xff1a;python-3.12.2-amd64.exe文件&#xff0c;双击启动安装向导。 为了防止C:盘文件因系统故障或者无…...

C++惯用法之RAII思想: 资源管理

C编程技巧专栏&#xff1a;http://t.csdnimg.cn/eolY7 目录 1.概述 2.RAII的应用 2.1.智能指针 2.2.文件句柄管理 2.3.互斥锁 3.注意事项 3.1.禁止复制 3.2.对底层资源使用引用计数法 3.3.复制底部资源(深拷贝)或者转移资源管理权(移动语义) 4.RAII的优势和挑战 5.总…...

矢量图是什么,有哪些格式的文件

矢量图是一种图形设计中常用的图像类型&#xff0c;与我们日常见到的光栅图像&#xff08;如JPEG、PNG等&#xff09;有本质的区别。矢量图基于数学方程和几何元素&#xff08;如点、线、曲线和形状&#xff09;来表示图像&#xff0c;而不是像光栅图那样通过像素阵列来表示。这…...

Linux 设置快捷命令

以ll命令为例&#xff1a; 在 Linux 系统上&#xff0c;ll 命令通常不是一个独立的程序&#xff0c;而是 ls 命令的一个别名。 这个别名通常在用户的 shell 配置文件中定义&#xff0c;比如 .bashrc 或 .bash_aliases 文件中。 要在 Debian 上启用 ll 命令&#xff0c;你可以按…...

SpringCloudFeign远程调用

文章目录 1. Feign 是什么2. Feign 的使用2.1 引入依赖2.2 写接口2.3 服务调用方2.4 启动测试 3. Feign 日志配置4. Feign 使用优化5. 注意包扫描问题 1. Feign 是什么 Feign 是一个声明式、模板化的 HTTP 客户端&#xff0c;它是由 Netflix 开发并开源的。Feign 极大地简化了…...

Java中List、Set、Map三种集合之间的区别

Java中List、Set、Map三种集合之间的区别 1. List2. Set3. Map 在Java中&#xff0c;List、Set和Map是三种常见的集合类型&#xff0c;它们之间也有一些重要的区别&#xff1a; 1. List List是有序集合&#xff0c;可以存储重复元素。List的实现类常见有ArrayList、LinkedLis…...

SpringMVC之DispatcherServlet组件

目录 一、SpringMVC的核心处理流程二、DispatcherServlet1、init()方法2、doDispatch()方法3、AbstractAnnotationConfigDispatcherServletInitializer类 一、SpringMVC的核心处理流程 请求到达 DispatcherServlet DispatcherServlet 的请求处理&#xff1a; DispatcherServlet…...

抢商家、夺用户、比低价,抖音、快手、小红书“奇招尽出”

随着流量红利逐渐消退&#xff0c;国内电商平台之间互相内卷已成为了行业常态&#xff0c;而无论是在该领域深耕已久的淘宝、京东、拼多多等电商巨头&#xff0c;还是新跨界而来的抖音、快手、小红书等电商新秀都在不断地进行创新&#xff0c;以便为商家提供更好的服务&#xf…...

ChatGPT引领的AI面试攻略系列:AI全栈工程师篇

系列文章目录 AI全栈工程师&#xff08;本文&#xff09; 文章目录 系列文章目录一、前言二、面试题1. 基础理论与数据处理2. 机器学习3. 深度学习4. 大模型与迁移学习5. 计算机视觉6. 自然语言处理&#xff08;NLP&#xff09;7. 多模态学习8. AI生成内容&#xff08;AIGC&am…...

上位机图像处理和嵌入式模块部署(qmacvisual配置)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们谈到了qmacvisual的编译、验证码、用户登录以及流程的编辑&#xff0c;这部分都是基础工作。事实上&#xff0c;除了这些内容之外&#xf…...

EXPLAIN PLAN FOR:在Oracle中生成执行计划

目录 案例 解析 Operation类型 在Oracle中&#xff0c;可以使用 EXPLAIN PLAN FOR 命令来生成执行计划&#xff0c;然后通过 SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY(PLAN_TABLE))来查看执行计划。需要注意的是&#xff0c;这两个命令需要在同一个窗口下运…...

蓝桥杯 9241.飞机降落

这道题本来作者以为是可以用一些小技巧进行暴力解法的&#xff0c;但是后来试了一下&#xff0c;不能过去全部数据。 下面是对半个的题解&#xff1a; #include<iostream> #include<stdio.h> #include<cstring> #include<cstdlib> #include<cmath…...

数据可视化原理-腾讯-散点图

在做数据分析类的产品功能设计时&#xff0c;经常用到可视化方式&#xff0c;挖掘数据价值&#xff0c;表达数据的内在规律与特征展示给客户。 可是作为一个产品经理&#xff0c;&#xff08;1&#xff09;如果不能够掌握各类可视化图形的含义&#xff0c;就不知道哪类数据该用…...

深度学习-Pytorch实现经典AlexNet网络:山高我为峰

深度学习-Pytorch实现经典AlexNet网络之山高我为峰 深度学习中&#xff0c;经典网络引领一波又一波的技术革命&#xff0c;从LetNet到当前最火的GPT所用的Transformer&#xff0c;它们把AI技术不断推向高潮。2012年AlexNet大放异彩&#xff0c;它把深度学习技术引领第一个高峰…...

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 迷宫(宽度优先搜索)

第四题&#xff1a;T4迷宫 标签&#xff1a;宽度优先搜索题意&#xff1a;给定 n n nx m m m由 # \# #&#xff08;墙&#xff09;、 . . .&#xff08;空地&#xff09;组成的地图&#xff0c;求从左上角到右下角的最少步数&#xff0c;每次只允许上下左右移动一格&#xff0…...

【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建

&#x1f308;欢迎来到C项目专栏 &#x1f64b;&#x1f3fe;‍♀️作者介绍&#xff1a;前PLA队员 目前是一名普通本科大三的软件工程专业学生 &#x1f30f;IP坐标&#xff1a;湖北武汉 &#x1f349; 目前技术栈&#xff1a;C/C、Linux系统编程、计算机网络、数据结构、Mysq…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...