LINQ的书写格式如下:  
 from 临时变量 in 集合对象或数据库对象  
 where 条件表达式   
[order by条件]   
select 临时变量中被查询的值  
 [group by 条件]

Lambda表达式的书写格式如下:

(参数列表) => 表达式或者语句块

其中: 参数个数:可以有多个参数,一个参数,或者无参数。

参数类型:可以隐式或者显式定义。

表达式或者语句块:这部分就是我们平常写函数的实现部分(函数体)。

1.查询全部

查询Student表的所有记录。
  select * from student
  Linq:
  from s in Students
  select s
  Lambda:
  Students.Select( s => s)
 
2 按条件查询全部:

查询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( s => new {
  SNAME = s.SNAME,SSEX = s.SSEX,CLASS = s.CLASS
  })

3.distinct 去掉重复的

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

4.连接查询 between and

查询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
 )
 )

5.在范围内筛选 In

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))

6.or 条件过滤

查询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 == "女"))

7.排序

以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)
 count()行数查询

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()

10.avg()平均

查询'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)

11.子查询

查询Score表中的最高分的学生学号和课程号。
 select distinct s.Sno,c.Cno from student as s,course as c ,score as sc
 where s.sno=(select sno from score where degree = (select max(degree) from score))
 and c.cno = (select cno from score where degree = (select max(degree) from score))
 Linq:
 (
 from s in Students
 from c in Courses
 from sc in Scores
 let maxDegree = (from sss in Scores
 select sss.DEGREE
 ).Max()
 let sno = (from ss in Scores
 where ss.DEGREE == maxDegree
 select ss.SNO).Single().ToString()
 let cno = (from ssss in Scores
 where ssss.DEGREE == maxDegree
 select ssss.CNO).Single().ToString()
 where s.SNO == sno && c.CNO == cno
 select new {
 s.SNO,
 c.CNO
 }
 ).Distinct()

12.分组 过滤

查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
 select avg(degree) from score where cno like '3%' group by Cno having count(*)>=5
 Linq:
 from s in Scores
 where s.CNO.StartsWith("3")
 group s by s.CNO
 into cc
 where cc.Count() >= 5
 select cc.Average( c => c.DEGREE)
 Lambda:
 Scores.Where( s => s.CNO.StartsWith("3") )
 GroupBy( s => s.CNO )
 Where( cc => ( cc.Count() >= 5) )
 Select( cc => cc.Average( c => c.DEGREE) )
 Linq: SqlMethod
 like也可以这样写:
 s.CNO.StartsWith("3") or SqlMethods.Like(s.CNO,"%3")

13.分组

查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
 select avg(degree) from score where cno like '3%' group by Cno having count(*)>=5
 Linq:
 from s in Scores
 where s.CNO.StartsWith("3")
 group s by s.CNO
 into cc
 where cc.Count() >= 5
 select cc.Average( c => c.DEGREE)
 Lambda:
 Scores.Where( s => s.CNO.StartsWith("3") )
 GroupBy( s => s.CNO )
 Where( cc => ( cc.Count() >= 5) )
 Select( cc => cc.Average( c => c.DEGREE) )
 Linq: SqlMethod
 like也可以这样写:
 s.CNO.StartsWith("3") or SqlMethods.Like(s.CNO,"%3")
 
14. 多表查询

select sc.sno,c.cname,sc.degree from course as c,score as sc where c.cno = sc.cno
 Linq:
 from c in Courses
 join sc in Scores
 on c.CNO equals sc.CNO
 select new
 {
 sc.SNO,c.CNAME,sc.DEGREE
 }
 Lambda:
 Courses.Join ( Scores, c => c.CNO,
 sc => sc.CNO,
 (c, sc) => new
 {
 SNO = sc.SNO,
 CNAME = c.CNAME,
 DEGREE = sc.DEGREE
 })
Average()

sql 、linq、lambda 总结的更多相关文章

  1. SQL,LINQ,Lambda语法对照图(转载)

    如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...

  2. SQL,Linq,Lambda之间的转换练习

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

  3. sql linq lambda 对比

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

  4. SQL/LINQ/Lamda 写法[转发]

    SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees   .Sele ...

  5. SQL Linq lamda区别

    SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees   .Sele ...

  6. SQL/LINQ/Lamda

    SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees   .Sele ...

  7. ASP.NET EF(LINQ/Lambda查询)

    EF(EntityFrameWork) ORM(对象关系映射框架/数据持久化框架),根据实体对象操作数据表中数据的一种面向对象的操作框架,底层也是调用ADO.NET ASP.NET MVC 项目会自动 ...

  8. [算法1-排序](.NET源码学习)& LINQ & Lambda

    [算法1-排序](.NET源码学习)& LINQ & Lambda 说起排序算法,在日常实际开发中我们基本不在意这些事情,有API不用不是没事找事嘛.但必要的基础还是需要了解掌握. 排 ...

  9. sql,lambda,linq语句

    实例 Code 查询Student表的所有记录. select * from student Linq: from s in Students select s Lambda: Students.Se ...

  10. Linq lambda 匿名方法

    课程6 委托.匿名方法.Lambda表达式.Linq查询表达式 上课日志1 一.委托的基本认识 提问:能不能把方法作为参数传递??? 也即是能不能声明一个能存放方法的变量呢——委托. 委托是一种数据类 ...

随机推荐

  1. 关于Visual Studio 2013 编译 multi-byte character set MFC程序出现 MSB8031 错误的解决办法

    转自:http://blog.csdn.net/xiaochunzao/article/details/16987703 Visual Studio 2013 编译旧的 multi-byte char ...

  2. A Horrible Poem(bzoj 2795)

    Description 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. Input 第一行一个正整 ...

  3. Eclipse启动时出现错误 An internal error occurred during: “Updating indexes”

    在Eclipse的workspace下有个.metadata文件夹,Eclipse出现异常的log文件就在这个目录下. 最近出现了这样的错误: 查看日志文件发现:     !ENTRY org.ecl ...

  4. 检查C++内存泄露

    #ifdef _DEBUG #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__) #else #define DEBUG_ ...

  5. Mac系统下使用VirtualBox虚拟机安装win7--第五步 共享文件夹设置

    1.启动virtualbox--选中win7虚拟机--点击设置--点击共享文件夹--点击右侧按钮添加共享文件夹

  6. ***PHP中error_reporting()用法详解(含codeigniter框架中屏蔽错误提示的解决方案)

    php中我们对错误的处理会常用到error_reporting函数了,大家可以看到最多的是error_reporting(E_ALL ^ E_NOTICE)了,这个到底什么意思呢,下面我来来看看. e ...

  7. hdu 4756 MST+树形dp ****

    题意:给你n(n = 1000)个二维点,第一个点是power plant,还有n - 1个点是dormitories.然后现在知道有一条寝室到寝室的边是不能连的,但是我们不知道是哪条边,问这种情况下 ...

  8. 在Virtulbox上装Ubuntu

    做个程序员,会用Linux,这应该是最基本的要求吧.可惜本人经常用Windows,只是偶尔去服务器上做些操作的时候才接触到linux.so,我要学Linux.刚学所以还是先装个虚拟机吧,等在虚拟机上用 ...

  9. C语言函数的读写

    文件打开关闭函数:fopen()和fclose() <FILE *fopen(char *filename, char *mode)| int fclose(FILE *fp)> 字符读写 ...

  10. ubuntu中禁用华硕S550C触摸屏的方法

    华硕S550C的触摸屏被我一不小心弄了一条裂缝,导致屏幕一直会莫名其妙自动进行点击,严重影响了使用.在windows 系统下通过FN+F7的快捷键可以直接禁用触摸屏,但是换成ubuntu 系统之后,快 ...