当前位置: 首页 > 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…...

监区越界预警革命:UWB单点局限,无感定位全域穿透式风控

监区越界预警革命&#xff1a;UWB单点局限&#xff0c;无感定位全域穿透式风控一、行业现状&#xff1a;传统UWB定位管控的单点式致命短板当前国内绝大多数智慧监区、看守所、戒毒所的人员越界预警与区域管控体系&#xff0c;仍高度依赖UWB穿戴式定位技术&#xff0c;依托定位基…...

Go语言模板引擎与前端渲染实战

Go语言模板引擎与前端渲染实战 引言 模板引擎是Web开发中连接后端数据与前端展示的关键组件。Go语言标准库提供了强大的模板引擎&#xff0c;本文将深入探讨其使用方法和最佳实践。 一、Go模板引擎基础 1.1 text/template与html/template // text/template - 纯文本模板 import…...

PaddleOCR车牌识别实战:从3万张数据集处理到模型训练部署的完整避坑指南

PaddleOCR车牌识别实战&#xff1a;从3万张数据集处理到模型训练部署的完整避坑指南 车牌识别作为计算机视觉领域的经典应用场景&#xff0c;在智慧交通、安防监控、停车场管理等行业有着广泛需求。PaddleOCR作为国内领先的OCR开源框架&#xff0c;凭借其优异的性能和丰富的预训…...

量子噪声环境下资源恢复实验与NISQ计算优化

1. 量子噪声环境下的资源恢复实验概述在当前的含噪声中等规模量子&#xff08;NISQ&#xff09;计算时代&#xff0c;量子硬件面临的最大挑战之一是如何在存在显著噪声的情况下保持量子态的相干性和有用性。我们设计了一系列实验来探究噪声对量子资源&#xff08;如纠缠和魔法态…...

GoogleTranslate_IPFinder高级功能详解:自定义IP段扫描与在线同步服务

GoogleTranslate_IPFinder高级功能详解&#xff1a;自定义IP段扫描与在线同步服务 【免费下载链接】GoogleTranslate_IPFinder 谷歌翻译API服务器的IP扫描、测速工具。 项目地址: https://gitcode.com/gh_mirrors/go/GoogleTranslate_IPFinder GoogleTranslate_IPFinder…...

Perseus:5分钟解锁碧蓝航线全皮肤的神奇补丁

Perseus&#xff1a;5分钟解锁碧蓝航线全皮肤的神奇补丁 【免费下载链接】Perseus Azur Lane scripts patcher. 项目地址: https://gitcode.com/gh_mirrors/pers/Perseus 还在为碧蓝航线中那些精美皮肤需要付费而烦恼吗&#xff1f;想免费体验所有舰娘的不同外观吗&…...

MultiHighlight:用智能色彩标记彻底改变你的代码阅读体验

MultiHighlight&#xff1a;用智能色彩标记彻底改变你的代码阅读体验 【免费下载链接】MultiHighlight Jetbrains IDE plugin: highlight identifiers with custom colors &#x1f3a8;&#x1f4a1; 项目地址: https://gitcode.com/gh_mirrors/mu/MultiHighlight 你是…...

AI 时代软件股反弹:行业分化,谁能成为新的基础设施巨头?

【美股软件股“集体误杀”】去年 10 月底开始&#xff0c;美股软件股经历了一场罕见的“集体误杀”。以软件 ETF——IGV 为代表&#xff0c;整个软件板块一度从高位显著回撤&#xff0c;跌幅接近 40%。曾经被视为高质量成长资产的软件公司&#xff0c;突然变成了 AI 浪潮下的“…...

Ollama迁移到vLLM:本地大模型服务生产化实战指南

1. 项目概述&#xff1a;为什么一个本地大模型服务迁移指南值得写满5000字&#xff1f;“From Local to Production: The Ultimate Ollama to vLLM Migration Guide”——这个标题里藏着三重现实张力&#xff1a;本地开发的便利性、生产环境的严苛性&#xff0c;以及大模型推理…...

使用curl命令快速测试Taotoken大模型API的连通性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用curl命令快速测试Taotoken大模型API的连通性 在将大模型能力集成到应用之前&#xff0c;验证API的连通性和基本功能是必不可少…...