首先说说这三者完全是三种不同的东西,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中被广泛使用。

Lambda:Lambda是表达式,Linq是语句!表达式要符号链接,语句就不用了!表达式是类似C#语法的写法,语句是类数据库语法的写法!

对比实现

※查询全部内容

1 查询Student表的所有记录。 select * from student

2 Linq: from s in Students 5 select s

3Lambda: 7 Students.Select( s => s)

※按列查询

select sname,ssex,class from student

Linq: from s in stuents

   select new {

    s.SNAME,

    Vs.SSEX,

    s.CLASS

  }

Lambda:Students.Select( s => new {SNAME = s.SNAME,SSEX = s.SSEX,CLASS = s.CLASS})

※distinct去重查询

查询教师所有的单位即不重复的Depart列。

select distinct depart from teacher

Linq: from t in Teachers.Distinct()select t.DEPART

Lambda: Teachers.Distinct().Select( t => t.DEPART)

※两个区间内查询

查询Score表中成绩在60到80之间的所有记录。

select * from score where degree between 60 and 80

Linq:from s in Scores

   where s.DEGREE >= 60 && s.DEGREE < 80

   select s

Lambda: Scores.Where(s => (s.DEGREE >= 60 && s.DEGREE < 80))

※在一个范围内查询

select * from score where degree in (85,86,88)

Linq:from s in Scores

  where (

    new decimal[]{85,86,88}

  ).Contains(s.DEGREE)

  select s

Lambda: Scores.Where( s => new Decimal[] {85,86,88}.Contains(s.DEGREE))

※或关系查询

查询Student表中"95031"班或性别为"女"的同学记录。 select * from student where class ='95031' or ssex= N'女'

Linq: from s in Students where s.CLASS == "95031"  || s.CLASS == "女" select s

Lambda:  Students.Where(s => ( s.CLASS == "95031" || s.CLASS == "女"))

※排序

以Class降序查询Student表的所有记录。 select * from student order by Class DESC

Linq: from s in Students  orderby s.CLASS descending select s

Lambda:  Students.OrderByDescending(s => s.CLASS)

※行数查询

select count(*) from student where class = '95031'

Linq:  ( from s in Students where s.CLASS == "95031"  select s  ).Count()

Lambda:  Students.Where( s => s.CLASS == "95031" )  .Select( s => s)  .Count()

※平均值查询

查询'3-105'号课程的平均分。 select avg(degree) from score where cno = '3-105'

Linq: ( from s in Scores where s.CNO == "3-105" select s.DEGREE ).Average()

Lambda: Scores.Where( s => s.CNO == "3-105") .Select( s => s.DEGREE)

※嵌套查询

查询Score表中的最高分的学生学号和课程号。

传送门:http://blog.csdn.net/u010926964/article/details/46240215

转载于:https://www.cnblogs.com/liubaojing/p/8621438.html

SQL、Linq和Lambda表达式 的关系相关推荐

  1. APS.NET MVC + EF (01)---Linq和Lambda表达式

    APS.NET MVC + EF (01)---Linq和Lambda表达式 1.1 Linq介绍 LINQ全称 Language Integrated Query(语言集成查询).为我们提供一种统一 ...

  2. java 函数式接口与lambda表达式的关系

    函数式接口与lambda表达式的关系 在java中,lambda表达式与函数式接口是不可分割的,都是结合起来使用的. 对于函数式接口,我们可以理解为只有一个抽象方法的接口,除此之外它和别的接口相比并没 ...

  3. Linq、Lambda表达式详细总结(转)

    (一)输入参数 在Lambda表达式中,输入参数是Lambda运算符的 左边部分.它包含参数的数量可以为0.1或者多个.只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略.输入参数的数 ...

  4. Db4o结合Linq、Lambda表达式的简单示例

    大多数人接触Db4o的查询,都是从"样本查询"(Query by Example)开始的,这种查询方式简单但不方便,功能和性能也很受局限.以下是引自官方的样本查询示例: // re ...

  5. Linq之Lambda表达式初步认识

    目录 写在前面 匿名方法 一个例子 Lambda 定义 一个例子 总结 参考文章 写在前面 元旦三天在家闲着无事,就看了看Linq的相关内容,也准备系统的学习一下,作为学习Linq的前奏,还是先得说说 ...

  6. Java关系表达式x y,java8--函数式接口,以及和Lambda表达式的关系

    一:函数式接口 函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口(Single Abstract Method). jdk8的lambda表达式的函数式接口主要有: imag ...

  7. sql语句-linq语言-lambda表达式对照

    1. 查询Student表中的所有记录的Sname.Ssex和Class列. select sname,ssex,class from student Linq:     from s in Stud ...

  8. lamber表达式sql_sql语句-linq语言-lambda表达式对照

    1. 查询Student表中的所有记录的Sname.Ssex和Class列.select sname,ssex,class from student Linq: from s in Students ...

  9. Linq To Sql中实现Left Join与Inner Join使用Linq语法与lambda表达式

    当前有两个表,sgroup与sgroupuser,两者通过gKey关联,而sgroup表记录的是组,而sgroupuser记录是组中的用户,因此在sgroupuser中不一定有数据.需要使用Left ...

最新文章

  1. “北京今年入冬的第一场雪”,纪念博客园写日志一年了
  2. swift_024(Swift 的构造过程)
  3. java重入锁_java并发编程:可重入锁是什么?
  4. LeetCode 第 29 场双周赛(890/2259,前39.4%)
  5. JAVA程序获取Tomcat的运行状态
  6. Go基础:函数与方法的区别
  7. 现有的 NFT 协议
  8. 爬虫之-bilibili视频下载-接口分析
  9. 知乎热榜的话题,为什么从阿里巴巴离职,大萌哥汇总了9大理由,看完我先柠檬酸了!
  10. 【Windows】修改C盘用户名称
  11. sql实现学生信息查询
  12. VS2010 : 正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。
  13. 基于Django框架的零食商城系统之Python毕设选题推荐
  14. ASCII编码-7Bit编码
  15. 简帛企业云智库介绍(企业知识管理系统)
  16. Redis万字笔记 深入浅出redis
  17. 树莓派魔镜——MagicMirror使用(一):开启MagicMirror
  18. echars大屏开发案例
  19. mw320r虚拟服务器,水星MW320R路由器桥接设置教程 | 192路由网
  20. 游戏原创声音该如何鉴定呢?

热门文章

  1. 腾讯开源图计算框架 Plato:十亿级节点图计算进入分钟级时代
  2. 面试宝典:深入理解这110道python面试题,AI和大数据向你招手
  3. 人工智能成热点,斯坦福华人女教授提出这观点,研究院因她成立!
  4. Lilt:一个为翻译专家开发的人工智能翻译平台
  5. 作为产品经理,你需要了解的基本算法知识和实操
  6. SAP LSMW Standard Batch (Direct) Input 方式制作的LSMW工具导入OPEN PO 单据时候’税码’字段的处理
  7. TSP问题中:如果有n个顶点,那么一共有多少种不同的环游
  8. 单纯形法(三)(概念部分)
  9. thinkbook14 2021款电脑买来后发现:关机后电源指示灯仍然是亮的
  10. 一文掌握明年物联网传感器市场!2022中国AIoT产业全景图谱报告新鲜出炉