理解lambda在linq中的应用

C#进阶高级语法之LINQ :Lambda 表达式 阅读详情

LinQ是必须学好的一种查询语言,不得不佩服微软的贡献。现阶段要学好Linq必须了解lambda,关于lambda本身,朋友可以找些资料自己看看,我这只是讲下他的本质。

lambda本质上是一个委托,他是匿名委托,有的资料叫匿名函数,其实lambda本身是从函数式编程语言中发展而来,函数式编程语言里函数是第一等元素,函数的参数,函数的返回值都是函数,程序没有变量,函数嵌套函数。而且函数式编程语言一直存在于象牙塔中,所以在工业界并没有得到通用,不过近年来工业界比较喜欢“复古”风格,所以函数式编程语言也慢慢的走上了历史的舞台。我们现在的编程叫命令式编程,函数式编程能很好的解决命令式编程不能解决的问题。

例如:

int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };
var m
= from n in arr

    where n < 5 orderby n

    select n;
foreach (var n in
m)
{
console.writeline(n);
}

最后输出结果是:1,3,4


这样就能输出arr数组中小于5的数,输出的数据还经过排序输出。

这样的实现以前是自己来实现的。linq能应用的地方很多,但是要使用好还是需要一定的学习的。

前面的案例还能书写成

 var q = arr.Where(p=> p<5).Select(p => p).OrderBy(n=>n);
            foreach (var i in q)
            {
                MessageBox.Show(i.ToString());
            }

效果跟前面的一样,那“p=> p<5”就是一个lambda表达式

我们看看在vs2008中,在where上按F1看看,

Enumerable..::.Where<(Of <(TSource>)>) 泛型方法 (IEnumerable<(Of <(TSource>)>), Func<(Of <(TSource, Int32, Boolean>)>)) 静态定义是

public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, int, bool> predicate )

注意Func<TSource, int, bool> 前面TSource, int是函数的输入,bool是返回类型

如此我们可以这样

 private bool mywhere(int i)
        {
            return i < 5;
        }

private void button3_Click(object sender, EventArgs e)
        {
            int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };
            Func<int, bool> f2 = mywhere;

            var q = arr.Where(f2).Select(p => p).OrderBy(n => n);
            foreach (var i in q)
            {
                MessageBox.Show(i.ToString());
            }
        }

其中 Func<int, bool> f2 = mywhere;是重点,在后面的查询语句中where中使用的f2其实就是回调mywhere方法相当于where(i=>i<5),i是参数

学习lambda是很有用的,特别是结合表达树,当然了如果组装表达树给人的感觉就是一个简单的查询都会被写成狂长的一堆语句,如果你公司是按照代码行计算工资的倒是值得祝贺,就目前看也没办法,只能期待Linq在未来能更好的发展,老实说要能很好的使用Linq必须要解决动态查询(在以前就是拼装SQL语句),要能深刻的理解动态查询就要学好lambda和表达树,关于微软提供的Dynamic.cs早期学习的时候可以少用,等搞清表达树后使用也不迟。关于表达树有机会在和大家聊聊.

 

五、Lambda和Linq 跟着Richard老师学习的Lambda和Linq的学习笔记 阅读详情

相关推荐

轻松应对 LINQ 查询:Lambda 表达式在 C# 中的高效应用

LINQ 是 C# 提供的一种查询机制,它支持通过查询表达式从集合中提取数据。LINQ 可以用于查询数组、列表、数据库、XML 文件等多种数据源。查询语法和方法语法。查询语法:类似 SQL 语句的语法,适用于大部分查询操作。方法语法:基于方法调用的语法,通常配合 Lambda 表达式使用,是最常见的一种方式。本文重点介绍方法语法和 Lambda 表达式的结合应用。Lambda 表达式与 LINQ 查询的结合,使得 C# 开发者能够以简洁、灵活的方式进行数据查询和处理。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 887

Linq和Lambda学习

Linq:在数据库中,可以使用sql语句进行查询数据。在C#程序中,我们可以得到数据后,使用linq进行查询。包括LINQ to Objects、LINQ to SQL、LINQ to Datasets、LINQ to Entities、LINQ to Data Source、LINQ to XML/XSD等。 Lambda:是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。 其实有时候,Linq和Lambda是可以替换使用,有时候使用Linq简单,有时候使用Lambda简单

故里2130 1445

Lambda表达式在LINQ查询中有哪些应用?

Lambda表达式在LINQ查询中扮演着至关重要的角色,通过简洁地定义各种查询条件、排序规则、选择和变换操作、分组标准以及聚合计算等,使得LINQ查询更加灵活、高效且易于编写和理解。

alankuo的专栏 1189

【Linq】Linq语法速览及对应Lambda表达式写法

Linq语法速览及对应Lambda表达式写法

weixin_44293426的博客 1262

41、深入理解C 7.0中的Lambda表达式与LINQ查询

本文深入探讨了C# 7.0中的Lambda表达式与LINQ查询,介绍了其基本语法、应用场景及优化技巧。同时,通过实际案例分析和高级应用(如并行查询、动态查询和异步查询),帮助读者掌握如何在实际开发中高效使用这些功能,提升代码的简洁性、可读性和性能。

tensorflowjs6的博客 282

LINQ与SQL及Lambda表达式语法对照详解

LINQ(Language Integrated Query)是 .NET Framework 3.5 引入的一项革命性特性,它将数据查询能力直接集成到 C#、VB.NET 等 .NET 语言中,打破了传统编程语言与数据访问层之间的壁垒。通过 LINQ,开发者可以使用统一的查询语法对多种数据源(如内存集合、SQL 数据库、XML 文档、ADO.NET 数据集等)执行筛选、排序、投影等操作。例如,下面的代码演示了如何使用 LINQ 查询一个整数列表中大于3的元素:select n;

weixin_35756892的博客 1139

liNQ和Lambda

2 liNQ可以处理非常大的数据集合,这一般需要选择集合的一个子集,来完成执行程序的任务。liNQ除了提供一种简单的查询语句,以便您精确指定要搜索的对象之外,LINQ还提供了许多扩展语法,更便于排序、组合和计算查询结果的统计数据。LINQ查询首先声明一个变量,from子句是指定数据源,它指定了要查询的数据,where指定查询的条件,select指定结果集中包含哪些元素...

weixin_44544845的博客 1153

开关电源|控制方式PWM、PFM、混合调制

频率调制器根据误差放大器的输出大小来改变方波信号的频率,若负载电流突然增加,输出电压 Vout随之下降,反馈电压 VFB 减小,此时误 差放大器的输出增高,频率调制器输出方波信号的频率增大,增加电感充电次数;若负载电流突然增加,输出电压Vom随之下降,反馈电压Vr减小,此时误差放大器的输出增高,PWM比较器输出方波信号的占空比增大,增加电感充电时间:若负载电流突然下降,PWM比较器输出方波信号的占空比减小,减少电感充电时间,从而稳定输出电压。它是在固定开关频率下,通过改变脉冲宽度来调节占空比的。

weixin_46969363的博客 1万+

SQL、LINQ、Lambda 三种用法,LINQ技巧

SQL、LINQ、Lambda 三种用法 颜色注释: SQL LinqToSql Lambda QA 1、 查询Student表中的所有记录的Sname、Ssex和Class列。 select sname,ssex,class from student Linq: from s in Students select new { s.SNAME, s.SSEX, s.CLASS } Lambda: Students.Select.

qq_18932003的博客 327

CS算法实战:用MATLAB从零实现SAR点目标成像(附完整代码)

本文详细介绍了如何使用MATLAB从零实现SAR点目标CS成像算法,涵盖Chirp Scaling(CS)算法的核心理论、距离徙动校正(RCMC)和方位压缩等关键步骤。通过完整的代码示例和实战技巧,帮助读者掌握SAR成像处理算法,提升遥感图像处理能力。

weixin_29211309的博客 179

LWIP协议栈在STM32H7上的内存优化实战:如何用32KB RAM实现稳定千兆以太网通信

本文深入探讨了在STM32H7微控制器上,如何通过内存优化策略,在仅32KB的D2 SRAM中稳定运行LWIP协议栈以实现千兆以太网通信。文章详细分析了STM32H7的内存架构、LWIP的内存消耗瓶颈,并提供了从描述符表与PBUF池精确分配、链接脚本修改到MPU区域划分的一整套实战优化方案,旨在解决大数据量传输卡死等常见配置问题。

gg901的博客 603

C# lambda 和 Linq

本章节给大家带来的是Lambda 和 Linq 的关系 Lambda : 是实例化委托的一个参数,也就是一个方法 Linq:是基于委托(lambda)的封装,代码重用,逻辑解耦,是一个帮助类库,linq是用泛型,委托,lamda实现的,总的来说:把对数据操作的通用部分完成,把可变的交给委托,使用者只关心可变部分。 一、Lambda 文章的开始已经说明Lambda是实例化委托的一个参数,也就...

weixin_30336061的博客 241

矢量网络分析仪VNA的校准之SOLT方法

作者:杭州冥鸿电子科技有限公司 邮箱:huanglong@deepelec.com S参数的测量方法有两种,一种是基于扫频测量的原理(VNA),另外一种是基于快沿阶跃响应的原理(TDR)。 下图是VNA的原理框图,主要包括以下部分: (1)激励信号源:提供感兴趣的频率范围内的入射信号; (2)信号分离装置:含功分器和定向耦合器,分离出入射,反射和传输信号; (3)接收机:...

u010018619的博客 2万+

linq和lambda表达式

           linq是什么呢?           LINQ,语言集成查询(Language Integrated Query),他提供N多查询方法,基本的是select(),where(),orderby()和groupby()这几种,是不是很熟悉,sql中不是也有吗?那么他们有什么区别吗?下面再说.   先从一个简单的实例上理解一下linq是如何使用的. 如实现这个功能:从...

gengyigang的专栏 232

VC中基于TWAIN协议控制扫描仪-----初级版

PS:本人是C++小白一枚,在研究此功能时不知走了多少弯路

a1101000099的专栏 8789

ESP32水墨屏日历实战:低功耗自动更新与HTTPS数据解析

本文详细介绍了ESP32水墨屏日历项目的开发实践,重点讲解了低功耗自动更新与HTTPS数据解析的实现方法。通过ESP32的自动休眠功能和水墨屏的零功耗特性,结合HTTPS请求安全获取网络数据,实现了高效节能的桌面日历应用。项目代码开源,适合物联网开发者参考。

xx56789的博客 777

SQL、LINQ和Lambda表达式

黄要 2020-12-24 19:38:20 17 收藏 文章标签: sql 版权 首先说说这三者完全是三种不同的东西,SQL是结构化查询语言(Structured Query Language)简称,这大家再熟悉不过了,下面主要介绍LINQ和Lambda表达式的基本概念以及同一查询这三者的不同实现。 简单介绍 LINQ(Language Integrate Query)是语言集成查询他在对象和数据之间建立一种对应的关系,可以使用访问内存对象的方式查询数据集合。LINQ查询是C#中的一种语言构造。因此开

weixin_53911379的博客 145

【android bluetooth 案例分析 01】【HiCar 详解 3】【hicar时如何交换Wifi参数的】

如果直接使用 L2CAP(不经过 RFCOMM),会需要额外的协议来保证可靠性,而 RFCOMM 天然支持。BLE 广播的数据长度受限(31 字节 / 255 字节扩展),不适合传输复杂的 Wi-Fi 连接参数。使用 RFCOMM 传输参数,可以兼容不同厂商的车机和手机,而无需依赖特殊的蓝牙功能。手机解析这些参数,并使用 Wi-Fi Direct 连接到车机。,然后才能让 Wi-Fi Direct 进行真正的数据传输。,适合传输 Wi-Fi 连接参数等关键数据。,可以安全地交换 Wi-Fi 连接信息。

奔跑吧 android 的博客 1740

LINQ LINQ Operators and Lambda Expression - Syntax & Examples

LINQ is a cool feature in C# 3.0. Most of the developers are struggling for the syntax and examples. Here I have collected various examples for each operator in LINQ and the equivalent Lambda Exp...

dianfan0079的博客 160

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linq 演变的过程(delegate => Lambda => Linq)

演变的过程(delegate => Lamb => Linq)1.  Funcstring,bool> filter = delegate(string s){return s.Length == 5;};  Funcstring,string> extract = delegate(string s){return s;}  Funcstring,string> project = delega

solo_123的专栏 1927

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

用c#算成绩的总和_C# 基础知识系列- 6 Lambda表达式和Linq简单介绍

前言 C#的lambda和Linq可以说是一大亮点,C#的Lambda无处不在,Linq在数据查询上也有着举足轻重的地位。 那么什么是Linq呢,Linq是 Language Intergrated Query(语言集成查询)的缩写,可以对本地对象集合或者远程数据源进行结构化的查询操作。 那什么又是Lambda呢?嗯,简单来讲就是匿名函数,我们不声明方法名,只写一个方法体,这个方法体就是lambd...

weixin_29062671的博客 408

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C#基础:第五部分 实用编程】LINQ查询

摘要:本文围绕C#中的LINQ(Language Integrated Query,语言集成查询)查询展开,详细介绍了查询表达式语法、延迟执行原理、Lambda表达式结合以及自定义LINQ提供程序等关键内容。通过丰富的代码示例和详细的实操流程,帮助读者深入理解LINQ查询的概念、原理和应用场景,提升在C#编程中使用LINQ进行数据查询和处理的能力。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1137

LINQ Lambda表达式

//使用拉姆达Lambda表达式 List<Users> users = DefaultList(); //users = users.Where(o => o.userName.Equals("名称")|| o.userName.Equals("名称")).ToList(); //使用LinQ var lists = (from o in users ...

slilx的博客 176

.net 6开发linq与lambda写法对照

.net 6性能高是公认的了,需要找测试结果的自己搜索吧,.net 6开发时用linq与lambda是很爽的事情,有些码农在实现查询功能的时候纠结于到底使用linq还是lambda来写代码,有些还搞不清楚,现就两者之间写汗的比较整理一个表格供参考。...

网络大杂烩 361
上一篇: .NET方法演化史 从Delegate到Lambda再到LINQ
下一篇: 浅谈LINQ to SQL集成数据库语言优劣
GoodShot
博客等级 码龄22年 968粉丝 281原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值