SQL,Linq,Lambda之间的转换练习
1、查询Student表中的所有记录的Sname、Ssex和Class列。
SQL:select sname,ssex,class from Students
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})
2、查询教师所有的单位即不重复的Depart列。
SQL:select distinct depart from Teachers
linq:from t in Teachers.distinct() select t.depart
lambda:Teachers.distinct().select(t=>t.depart)
3、查询Student表的所有记录。
SQL:select * from students
linq:from s in students select s
lambda:students.select(s=>s)
4、查询Score表中成绩在60到80之间的所有记录。
SQL:select * from Score where degree between 60 and 80
linq:from s in Score where s.degree>=60 && s.degree<=80 select s
lambda:Score.where(s=>(s.degree>=60 && s.degree<=80))
5、查询Score表中成绩为85,86或88的记录。
SQL:select * from Score where degree in (85,86,88)
linq:from s in Score where (new decimal[]{85,86,88}).contains(s.degree) select s
lambda:Score.where(s=>(new Decimal[]{85,86,88}.contains(s.degree)))
查询Score表中成绩不是85,86或88的记录。
SQL:select * from Score where degree not in (85,86,88)
linq:from s in Score where !(new decimal[]{85,86,88}).contains(s.degree) select s
lambda:Score.where(s=>!(new Decimal[]{85,86,88}.contains(s.degree)))
6、查询Student表中"95031"班或性别为"女"的同学记录。
SQL:select * from students where class ='95031' or ssex= N'女'
linq:from s in Students where s.class="95031" || s.ssex="女" select s
lambda:Students.where(s=>(s.class="95031"||s.ssex="女"))
7、以Class降序查询Student表的所有记录。
SQL:select * from students order by Class DESC
linq:from s in students orderby s.class Descending select s
lambda:Students.OrderByDescending(s=>s.class)
8、以Cno升序、Degree降序查询Score表的所有记录。
SQL:select * from score order by Cno ASC,Degree DESC
linq:from s in Score orderby s.degree descending orderby s.cno ascending select s
lambda:Score.OrderByDescending(s=>s.degree).OrderBy(s=>s.cno)
9、查询"95031"班的学生人数。
SQL:select count(*) from students 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、查询Score表中的最高分的学生学号和课程号。
SQL:select distinct s.Sno,c.Cno from students 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()
11、查询'3-105'号课程的平均分。
SQL: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).average()
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))
13、查询最低分大于70,最高分小于90的Sno列。
select sno from score group by sno having min(degree) > 70 and max(degree) < 90
linq:from s in Scores group s by s.sno into ss where ss.min(cc=>cc.degree)>70 && ss.max(cc=>cc.degree)<90 select new {sno=ss.key}
lambda:Scores.GroupBy(s=>s.sno).where(ss=>((ss.Min(cc=>cc.degree)>70)&&(ss.max(cc=>cc.degree)<90))).select(ss=>new{sno=ss.key})
14、查询所有学生的Sname、Cno和Degree列。
select s.sname,sc.cno,sc.degree from student as s,score as sc where s.sno = sc.sno
linq:from s in Students join sc in Scores on s.sno equals sc.sno select new {s.sname,sc.cno,sc.degree}
lambda:Students.join(Scores, s=>s.sno, sc=>sc.sno, (s,sc)=>new{sname=s.name,cno=sc.cno,degree=sc.degree})
15、查询所有学生的Sno、Cname和Degree列。
SQL: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.came,sc.degree}
lambda:Courses.join(Scores,c=>c.no,sc=>sc.cno,(c,sc)=>new{sno=sc.sno,cname=c.cname,degree=sc.degree})
16、查询所有学生的Sname、Cname和Degree列。
SQL:select s.sname,c.cname,sc.degree from student as s,course as c,score as sc where s.sno = sc.sno and c.cno = sc.cno
linq:from s in Students from c in Courses from sc in Scores where s.sno==sc.sno && c.cno==sc.cno select new{s.sname,c.cname,sc.degree}
SQL,Linq,Lambda之间的转换练习的更多相关文章
- SQL,LINQ,Lambda语法对照图(转载)
如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...
- C# ORM中Dto Linq Expression 和 数据库Model Linq Expression之间的转换
今天在百度知道中看到一个问题,研究了一会便回答了: http://zhidao.baidu.com/question/920461189016484459.html 如何使dto linq 表达式转换 ...
- sql linq lambda 对比
. 查询Student表中的所有记录的Sname.Ssex和Class列. select sname,ssex,class from student Linq: from s in Students ...
- 构造复杂Lambda困惑之学会用LinqPad和Linqer实现Sql 和 Lambda之间的互转
一:linq的话我们可能会遇到两个问题: 1. 我们的linq出现性能低下的时候,如果优化???? 我们写的linq所生成的sql是无法控制的... (要做性能优化,必须预先知道sql会生成啥样的?? ...
- SQL/LINQ/Lamda 写法[转发]
SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees .Sele ...
- SQL Linq lamda区别
SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees .Sele ...
- SQL/LINQ/Lamda
SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees .Sele ...
- linq中查询列表的使用及iqueryable和list集合之间的转换
linq中查询列表的使用及iqueryable和list集合之间的转换 比如要查询一个货架集合,但是只需要其id和name即可,可以用以下方法:先写一个model类:CatalogModel(注意该类 ...
- java.util.Date 与 java.sql.Date 之间的转换
SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); String dateStr = sdf.for ...
随机推荐
- 初学C#和MVC的一些心得,弯路,总结,还有教训(1)--语言的选择
因为惰性,自制力,求知欲等各方面原因....一直没有学新技术,总感觉VB6凑合能用就凑合用.... 于是大概从05年开始,几乎每次新版的vs一发布,我就下载回来,然后安装,然后,,,,就扔那了.... ...
- cookie被禁用session怎么办
关闭Cookie的情况下使用Session,途径有以下几种:\ 1. 设置php.ini配置文件中的“session.use_trans_sid = 1”,或者编译时打开“--enable-trans ...
- php集成动态口令认证
这篇文章主要为大家详细介绍了php集成动态口令认证,动态口令采用一次一密.用过密码作废的方式来提高安全性能,感兴趣的小伙伴们可以参考一下 大多数系统目前均使用的静态密码进行身份认证登录,但由于静态密码 ...
- CSS3-transform 转换/变换
transform 向元素应用 2D 或 3D 转换.该属性允许我们对元素进行旋转.缩放.移动或倾斜. 兼容性: Internet Explorer 10.Firefox.Opera 支持 trans ...
- ionic+angularjs开发hybrid App(环境配置+创建测试项目)
本文使用的系统是win10 因为后期需要使用nodejs 所以先把node装好 https://nodejs.org/download/ 下载JDK并配置Java运行环境 http://www.ora ...
- BZOJ 1086: [SCOI2005]王室联邦
1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 1399 Solved: ...
- 【codevs1515】 跳
http://codevs.cn/problem/1515/ (题目链接) 题意 给出一个棋盘,规定走到(x,y)的花费C(x,y)=C(x-1,y)+C(x,y-1),x=0或y=0时C(x,y)= ...
- CentOS 6.7下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器
一.简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中获取 ...
- 加载dll过程中assembly失败
错误现象: 进行插件读取时出现错误:“尝试从一个网络位置加载程序集,在早期版本的 .NET Framework 中,这会导致对该程序集进行沙盒处理.此发行版的 .NET Framework 默认情况下 ...
- 介绍DSA数字签名,非对称加密的另一种实现
接下来我们介绍DSA数字签名,非对称加密的另一种实现. DSA DSA-Digital Signature Algorithm 是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS ...