欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# LINQ查询表达式及对应LAMBDA表达式的用法

程序员文章站 2022-06-22 15:04:29
c#编程语言非常优美,我个人还是非常赞同的。特别是在学习一段时间c#后发现确实在它的语法和美观度来说确实要比其它编程语言强一些(也可能是由于vs编译器的加持)用起来非常舒服,而且对于c#我觉得他最优美...

c#编程语言非常优美,我个人还是非常赞同的。特别是在学习一段时间c#后发现确实在它的语法和美观度来说确实要比其它编程语言强一些(也可能是由于vs编译器的加持)用起来非常舒服,而且对于c#我觉得他最优美之处不仅仅是语法糖方面还有就是体现在linq和lambda表达式。

本篇文简单介绍一下关于c#当中linq表达式和其对应的lambda表达式的用法,关于这两部分内容的相关参考资料:

人民邮电出版社《c#程序设计及应用教程》(第3版)

博客:《c# linq查询

同时在介绍的时候我会尽量挑出重要部分同时加上我自己的理解和认识,如有偏差还请指教。

首先先让我们看一下什么是linq查询表达式和lambda表达式:

C# LINQ查询表达式及对应LAMBDA表达式的用法

运行结果:

C# LINQ查询表达式及对应LAMBDA表达式的用法

以上是对linq查询表达式和lambda表达式的一个简单的应用,都是查询stu列表中年龄大于等于20岁的结果并且把结果按照年龄降序排列。

由此可见linq表达式和lambda表达式并没有什么可比性,只是用lambda可以实现linq的查询语句。

那与lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在《深入理解c#》中称其为“点标记”。

例子中主要以linq表达式为主,linq表达式结构更为清晰易于理解,同时也会给出对应的点标记写法(所有的linq查询表达式都可以转成对应的点标记。反之,不是所有的点标记都可以转成查询表达式。),所以如果想要了解这部分的读者也请往下看。本文会介绍linq查询表达式用法以及对应的lambda表达式。

linq查询表达式是一组查询技术的统称,其主要思想是将各种查询功能直接集成到c#语言中,不论是对象、xml、还是数据库都可以用linq编写查询语句。linq与传统迭代技术实现的查询优势在于更简明、更易读这种优势特别是在筛选多个条件时更为显著;使用很少的程序代码便能实现复杂的查询和筛选;无需修改或者是进行很少的修改就能移植到其它的数据源。linq查询语句并不复杂并且与sql语句有些类似,学习起来难度并不大。

接下来直接看linq查询例子:

查询年龄是30岁的王同学的信息:

运行结果:

C# LINQ查询表达式及对应LAMBDA表达式的用法

linq查询表达式必须以form子句开头,并且必须以select或group子句结尾。在第一个from子句和最后一个select或group子句之间,查询表达式可以包含一个或者多个where、orderby、join、let甚至附加from子句。linq表达式整体的用法和sql语句很像,在上面的例子中就可以看出。

上面的例子的含义就是从数据源stu中查询一个数据“t”,“t”满足的条件就是它的name是王同学同时它的age是30,然后查询这个“t”。linq查询语句的返回值类型为ienumerable<t>,linq执行查询时,一般利用foreach循环执行查询得到一个序列,这这种方式称为“延迟执行”。

什么是“延迟执行”?还是上面例子中的查询:

运行结果:

C# LINQ查询表达式及对应LAMBDA表达式的用法

延迟查询就是只需构造一次查询语句,可以多次使用。在list中添加新元素之后并没有重新执行查询操作,然而res中的结果却根据list中元素的改变相应发生了改变。

从学生中选出年龄小于25岁并且按照年龄降序排列

运行结果:

C# LINQ查询表达式及对应LAMBDA表达式的用法

从学生中查询姓王的同学的信息并且按照年龄降序排列

运行结果:

C# LINQ查询表达式及对应LAMBDA表达式的用法

学生信息按照年龄、id进行排序

运行结果:

C# LINQ查询表达式及对应LAMBDA表达式的用法

按照年龄进行分组,查询相同年龄数量大于2的内容

运行结果:

C# LINQ查询表达式及对应LAMBDA表达式的用法

查询出集合qst中year等于集合qsc中year的元素并形成新的集合

运行结果:

C# LINQ查询表达式及对应LAMBDA表达式的用法

并行linq

并行查询可以分解查询的工作,使其分布在多个线程上。当pc拥有多个cpu时,可以看到并行查询带来的改进效果。并行linq适用于大型的集合查询,并拥有一定的优势。使用system.collections.concurrent.partitioner.create可以手动创建分区器。可以粗鲁的认为并行linq对于大集合的查询是优势比较明显的。取消长时间运行的并行linq查询可以设置利用system.threading.cancellationtokensource设置取消操作。

运行结果:

C# LINQ查询表达式及对应LAMBDA表达式的用法

写在最后,如果你对以上linq以及对应的lambda的使用方法都已经了解那你已经初步了解了linq查询表达式和lambda表达式,这里需要说明的一点是关于lambda的使用方法并不仅仅只限于进行查询,他是一个主要用于简化委托的代码编写形式,他用法远比文中介绍的更加广泛,本文是为了对比展现linq和lambda。

以上就是c# linq查询表达式及对应lambda表达式的用法的详细内容,更多关于c# linq查询表达式及lambda表达式的资料请关注其它相关文章!