LINQ to SQL系列四 使用inner join,outer join

先看一个最简单的inner join,在读取Student表时inner join Class表取的对应的Class信息:

static void Main(string[] args)
{
    using (var writer = new StreamWriter(WatchSqlPath, false, Encoding.UTF8))
    {
        using (DbAppDataContext db = new DbAppDataContext())
        {
            db.Log = writer;

            //inner join
            var query = from s in db.Students
                        join c in db.Classes on s.ClassID equals c.ClassID
                        where c.ClassID == 1
                        select new
                        {
                            ClassID = s.ClassID,
                            ClassName = c.ClassName,
                            Student = new
                            {
                                Name = s.Name,
                                ID = s.StudentID
                            }
                        };

            foreach (var item in query)
            {
                Console.WriteLine("{0} {1} {2}", item.ClassID, item.ClassName, item.Student.Name);
            }
        }
    }

    Console.ReadLine();
}

特别简单,就不贴sql了,继续看outer join:

static void Main(string[] args)
{
    using (var writer = new StreamWriter(WatchSqlPath, false, Encoding.UTF8))
    {
        using (DbAppDataContext db = new DbAppDataContext())
        {
            db.Log = writer;

            //left outer join
            var query = from s in db.Students
                        join c in db.Classes on s.ClassID equals c.ClassID into gc
                        from gci in gc.DefaultIfEmpty()
                        select new
                        {
                            ClassID = s.ClassID,
                            ClassName = gci.ClassName,
                            Student = new
                            {
                                Name = s.Name,
                                ID = s.StudentID
                            }
                        };
            foreach (var item in query)
            {
                Console.WriteLine("{0} {1} {2}", item.ClassID, item.ClassName, item.Student.Name);
            }
        }
    }

    Console.ReadLine();
}

Outer join时必须将join后的表into到一个新的变量gc中,然后要用gc.DefaultIfEmpty()表示外连接。

linq to sql相关随笔:

1.  从CUD开始,如何使用LINQ  to SQL插入、修改、删除数据

2.  查询 使用LINQ to SQL做简单查询

3.  查询 延迟加载与立即加载,使用LoadWith和AssociateWith

4.  查询 inner join,left outer join

5.  Linq to SQL中的聚合grouping having

6.  LINQ to SQL查询优化,需要忧虑性能吗?

时间: 2024-11-10 14:03:06

LINQ to SQL系列四 使用inner join,outer join的相关文章

LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据

LINQ to SQL 系列 如何使用LINQ to SQL插入.修改.删除数据 http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html http://blog.csdn.net/pan_junbiao/article/details/7015633 http://blog.sina.com.cn/s/blog_95cfa64601019vs1.html

一步一步学Linq to sql系列文章 转lovecherry

http://www.cnblogs.com/lovecherry/archive/2007/08/13/853754.html 现在Linq to sql的资料还不是很多,本人水平有限,如果有错或者误导请指出,谢谢. 一步一步学Linq to sql(一):预备知识 一步一步学Linq to sql(二):DataContext与实体 一步一步学Linq to sql(三):增删改 一步一步学Linq to sql(四):查询句法 一步一步学Linq to sql(五):存储过程 一步一步学L

Hive中join, outer join, semi join区别

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 最常用的就是多表关联查询,主要讲解下join.outer join和semi join的具体使用. join是最简单的关联操作,两边关联只取交集. outer join分为left outer join.right outer join和full outer join. left outer join是以左表驱动,右表不存在的

LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据 (转)

http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html LINQ和 LINQ to SQL 都已经不是一个新事物了,但是我接触的比较晚,本着绝知此事要躬行的态度,决定写这个系列. 本文使用的测试环境是VS 2010,和sql server 2005数据库. 1.  从CUD开始,如何使用LINQ  to SQL插入.修改.删除数据 2.  查询 使用LINQ to SQL做简单查询 3.  查询 延迟加载与立即

LINQ to SQL系列三 使用DeferredLoadingEnabled,DataLoadOption指定加载选项

本文中举例用到的数据模型如下: Student和Class之间是多对一关系,Student和Course之间是多对多关系. DataContext的DeferredLoadingEnabled属性指定是否需要延时加载,其默认值为true.以Student为例,其延时加载的对象是指Class和对应的Course.设定延时加载为true时,当访问到Student实例的Class属性或者StudentCourse属性时会自动加载Class表和StudentCourse表中的数据,如下示例代码: 1 2

LINQ to SQL 系列五 grouping having

在linq to sql中grouping很简单.很灵活,但是如果不注意则会中了Microsoft的糖衣炮弹. 本文使用的数据模型如下图: 1. 用linq to sql写一个最简单的group语句:查询Students表并按ClassID分组,输出每个班级的学生数.下面的代码是糖衣版. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 static void Main(string[] args) {     using (var

SQL SERVER 2012 第四章 连接 JOIN の OUTER JOIN,完全连接FULL JOIN,交叉连接CROSS JOIN

SELECT <SELECT LIST> FROM <the table you want to be the "LEFT" table> <LEFT|RIGHT> [OUTER] JOIN <table you want to be the "RIGHT" table> ON <join condition> 可以看做JOIN之前的表是左表,之后的表是右表. 外部连接本质上是包含的.明确包含的记录取决于使

oracle inner join | outer join | full join | add constraint | drop constraint | disable constraint | enable constraint

--建表语句create table SCOTT.DEPT( deptno NUMBER(2) not null, dname VARCHAR2(15), loc VARCHAR2(13))tablespace USERS;comment on table dept   is '部门表';comment on column deptno   is '部门编号';comment on column loc   is '部门所在地': --add primary key constraintalte

Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)

转载http://www.cnblogs.com/shenqiboy/p/3260105.html 我们知道在SQL中一共有五种JOIN操作:INNER JOIN.LEFT OUTER JOIN.RIGHT OUTER JOIN.FULL OUTER JOIN.CROSS JOIN        内连接.Sql: SELECT [t0].[GroupName], [t1].[UserName] FROM [Group] AS [t0] INNER JOIN [User] AS [t1] ON (