zoukankan      html  css  js  c++  java
  • LINQ to SQL学习笔记(四)——Join(1)

         本篇将介绍Join操作符的使用,Join操作符类似于SQL命令中的join关键字,都是用于进行表连接操作的,实现多个表之间的查询处理,当然此处的多表也包含自身与自身的连接。

         Join操作符的使用包括三类,分别为Join(Join查询),SelectMany(Select一对多选择)和GroupJoin(分组Join查询)。

    1、SelectMany

      SelectMany查询需要满足两个条件,1、查询语句中没有Join和into关键字,2、必须出现EntitySet。在表关系中包括一对一、一对多、多对多关系。

    (1)一对多关系

        一对多的关系可以理解成一个A对应多个B,例如一个班级对应多个学生。

    1
    2
    3
    4
    var query = from class in db.Classes
                            from stu in class.Students
                            where class.Grade == 5
                        select stu;

      上述语句描述Grade值等于5的班级的所有学生。在查询过程中,Students以EntitySet的形式出现在Classes类中。

    (2)多对多关系

      多对多的关系可以理解成一个A对应多个B,同时一个B又对应多个A。例如学生与课程之间的关系,一个学生可以选择多门课程,一门课程可以被多个学生选择。对应于多对多的关系,一般使用三张表来描述,两张实体表,一张关系表。

    1
    2
    3
    4
    5
    6
    7
    8
    var query = from s in db.Students
                        from ss in s.StudentCources
                         where s.Age == 20
                        select new {
                        s.FirstName,
                        s.LastName,
                        ss.Cources.Cource.Name
                        };               

      上述语句描述年龄为20岁的学生选择的课程名称和学生姓名。

    (3)自连接关系

      自连接关系描述的就是自己与自己进行连接,根据某个相同信息进行筛选。例如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var query = from s1 in db.Students
                         from s2 in db.Students
                        where s1.Age == s2.Age
                        select new {
                            FirstName1=s1.FirstName,
                            LastName1 = s1.LastName,
                            FirstName2=s2.FirstName,
                            LastName2 = s2.LastName,
                            s1.Age
                        };

      上述语句描述了选择同龄学生,并显示他们的姓名和年龄。

  • 相关阅读:
    Encryption (hard) CodeForces
    cf 1163D Mysterious Code (字符串, dp)
    AC日记——大整数的因子 openjudge 1.6 13
    AC日记——计算2的N次方 openjudge 1.6 12
    Ac日记——大整数减法 openjudge 1.6 11
    AC日记——大整数加法 openjudge 1.6 10
    AC日记——组合数问题 落谷 P2822 noip2016day2T1
    AC日记——向量点积计算 openjudge 1.6 09
    AC日记——石头剪刀布 openjudge 1.6 08
    AC日记——有趣的跳跃 openjudge 1.6 07
  • 原文地址:https://www.cnblogs.com/xiaogui9527/p/2982320.html
Copyright © 2011-2022 走看看