sql 、linq、Lambda 查询语句的格式

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

Lambda表达式的书写格式如下:
集合对象.Where(临时变量=>(条件表达式))
Sql、Linq、Lambda 查询语句示例

1.查询Student表的所有记录

Sql:
    select * from student
Linq:
    from s in Students
    select s
Lambda:    
    Students.Select( s => true) 

2.查询Student表中的所有记录的Sname、Ssex和Class列。

Sql:
     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.查询教师所有的单位即不重复的Depart列。

Sql:
    select distinct depart from teacher
Linq:
    from t in Teachers.Distinct()
    select t.DEPART
Lambda:
    Teachers.Distinct().Select( t => t.DEPART)

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

Sql:
    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

Sql:
     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.查询Student表中”95031”班或性别为”女”的同学记录。

Sql:
    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表的所有记录。

Sql:
     select * from student order by Class DESC
Linq:
    from s in Students
    orderby s.CLASS descending
    select s
Lambda:
    Students.OrderByDescending(s => s.CLASS)

8.count()行数查询

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

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

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

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

11.查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。

Sql:
      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")

12.多表查询

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.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()
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值