SQL、LINQ和Lambda表达式

首先说说这三者完全是三种不同的东西,SQL是结构化查询语言(Structured Query Language)简称,这大家再熟悉不过了,下面主要介绍LINQ和Lambda表达式的基本概念以及同一查询这三者的不同实现。

简单介绍

LINQ(Language Integrate Query)是语言集成查询他在对象和数据之间建立一种对应的关系,可以使用访问内存对象的方式查询数据集合。LINQ查询是C#中的一种语言构造。因此开发人员可以再C#代码汇总嵌套类似于SQL语句的查询表达式,从而实现数据查询的功能。LINQ也不是简单地作为C#中嵌套查询表达式,,而是将查询表达式作为C#的一种语法。 在.NET类库中,LINQ相关类库都在System.Linq命名空间下,该命名空间提供支持使用LINQ进行查询的类和接口,其中最主要的是以下两个类和两个接口。 ※IEnumerable接口:它表示可以查询的数据集合,一个查询通常是逐个对集合中的元素进行筛选操作,返回一个新的IEnumerable接口,用来保存查询结果。 ※IQueryable接口:他继承IEnumerable接口,表示一个可以查询的表达式目录树。 ※Enumerable类:它通过对IEnumerable提供扩展方法,实现LINQ标准查询运算符。包括过路、导航、排序、查询、联接、求和、求最大值、求最小值等操作。 ※Queryable类:它通过对IQueryable提供扩展方法,实现LINQ标准查询运算符。包括过路、导航、排序、查询、联接、求和、求最大值、求最小值等操作。 Lambda表达式实际上是一个匿名函数,它可以说是对LINQ的补充。由于LINQ查询关键字和IEnumerable接口的方法之间有一个对应关系,但是LINQ查询表达式中可以使用的查询功能很少。在实际开发中通过查询结果或数据源进行方法调用,从而进行更多的查询操作。由于Lambda表达式是匿名函数,它可以赋值到一个委托,而在IEnumerable接口的方法中很多通过函数委托来实现自定义运算、条件等操作,所以Lambda表达式在LINQ中被广泛使用。

对比实现

※查询全部内容

1 查询Student表的所有记录。2 select * from student3 Linq:4from s in Students5select s6 Lambda:7Students.Select( s => s)

※按列查询

select sname,ssex,class from student 3 Linq: 4from s in Students { 6s.SNAME, 7s.SSEX, 8s.CLASS 9}10 Lambda:11Students.Select( s => new {12SNAME = s.SNAME,SSEX = s.SSEX,CLASS = s.CLASS13})

※distinct去重查询

查询教师所有的单位即不重复的Depart列。2 select distinct depart from teacher3 Linq:4from t in Teachers.Distinct()5select t.DEPART6 Lambda:7Teachers.Distinct().Select( t => t.DEPART)

※两个区间内查询

1 查询Score表中成绩在60到80之间的所有记录。 2 Linq: 4from s in Scores s 7 Lambda: 8Scores.Where( 9s => (10s.DEGREE >= 60 && s.DEGREE < 8011)12)

※在一个范围内查询

select * from score where degree in (85,86,88)2 Linq:3from s in Scores4where ([]{85,86,88}6).Contains(s.DEGREE)7select s8 Lambda:9Scores.Where( s => new Decimal[] {85,86,88}.Contains(s.DEGREE))

※或关系查询

查询Student表中”95031″班或性别为”女”的同学记录。=’95031′ or ssex= N’女’3 Linq:4from s in Students|| s.s8 Lambda:9Students.Where(s => ( s.CLASS == “95031” || s.CLASS == “女”))

※排序

以Class降序查询Student表的所有记录。Linq:4from s in Students5orderby s.CLASS descending6select s7 Lambda:8Students.OrderByDescending(s => s.CLASS)

※行数查询

Linq: 3( from s in Students s 6).Count() 7 Lambda: 8Students.Where( s => s.CLASS == “95031” ) 9.Select( s => s)10.Count()

※平均值查询

查询’3-105’号课程的平均分。 2 Linq: 4( 5from s in Scores s.DEGREE 8).Average() 9 Lambda:10Scores.Where( s => s.CNO == “3-105”)11.Select( s => s.DEGREE)如此锐气,二十后生有之,六旬男子则更多见。

SQL、LINQ和Lambda表达式

相关文章:

你感兴趣的文章:

标签云: