zoukankan      html  css  js  c++  java
  • SQL Join 、LINQ Join、SQO Join

    以下内容大部分来自己老外的一篇技术文档,有兴趣的朋友可以研究下;

    文档地址:http://www.c-sharpcorner.com/UploadFile/ff2f08/sql-join-in-linq-linq-to-entity-linq-to-sql/


    示例:

    两个表:EmployeeMaster和DepartmentMaster。这两个表之间的关系和表的虚拟数据如下所示。

    部门表:

    员工表:

      


     Inner Join (产生员工表和部门表的交集)

    SQL: 

    select e.Code,e.Name,d.Name from EmployeeMaster as e inner join DepartmentMaster as d on e.DepartmentId = d.DepartmentId 

    LINQ:

    using (var Context = new LinqTestEntities())
                {
                    var innerJoin = from e in Context.EmployeeMaster
                                    join d in Context.DepartmentMaster 
                                    on e.DepartmentId equals d.DepartmentId
                                    select new
                                    {
                                        EmployeeCode = e.Code,
                                        EmployeeName = e.Name,
                                        DepartmentName = d.Name
                                    };
                    Console.WriteLine("Employee Code	Employee Name	Department Name");
                    foreach (var data in innerJoin)
                    {
                        Console.WriteLine(data.EmployeeCode + "		" + data.EmployeeName + "	" + data.DepartmentName);
                    }
    }

    SQO :

    using (var Context = new DBEntity.LinqTestEntities())
                {var innerJoin = Context.EmployeeMaster
                        .Join(
                        Context.DepartmentMaster,
                        s => s.DepartmentId,
                        d => d.DepartmentId,
                        (s, d) => new { s, d })
                        .Where(sd => sd.s.DepartmentId == sd.d.DepartmentId)
                        .ToList();
                    Console.WriteLine("Employee Code	Employee Name	Department Name");
                    foreach (var data in innerJoin)
                    {
                        Console.WriteLine(data.s.Code + "		" + data.s.Name + "	" + data.d.Name);
                    }
    }

    查询结果:

     


    Left outer join (产生员工表的全集,对于没有匹配的记录,以 null 代替)

    SQL: 

    SELECT e.Code,e.Name,d.Name FROM EmployeeMaster as e LEFT OUTER JOIN DepartmentMaster as d ON e.DepartmentId = d.DepartmentId

    LINQ:

     using (var Context = new LinqTestEntities())
                {
                    var leftOuterJoin = from e in Context.EmployeeMaster
                                        join d in Context.DepartmentMaster 
                                        on e.DepartmentId equals d.DepartmentId 
                                        into dept
                                        from department in dept.DefaultIfEmpty()
                                        select new
                                        {
                                            EmployeeCode = e.Code,
                                            EmployeeName = e.Name,
                                            DepartmentName = department.Name
                                        };
                    Console.WriteLine("Employee Code	Employee Name	Department Name");
                    foreach (var data in leftOuterJoin)
                    {
                        Console.WriteLine(data.EmployeeCode + "		" + data.EmployeeName + "	" + data.DepartmentName);
                    }
    }

    查询结果:


    Right outer join (产生员工表的全集,对于没有匹配的记录,以 null 代替)

    SQL:

    SELECT e.Code,e.Name,d.Name FROM EmployeeMaster as e right outer JOIN DepartmentMaster as d ON e.DepartmentId = d.DepartmentId

     LINQ:

                using (var Context = new LinqTestEntities())
                {
                    var rightOuterJoin = from d in Context.DepartmentMaster
                                         join e in Context.EmployeeMaster 
                                         on d.DepartmentId equals e.DepartmentId 
                                         into emp
                                         from employee in emp.DefaultIfEmpty()
                                         select new
                                         {
                                             EmployeeCode = employee.Code,
                                             EmployeeName = employee.Name,
                                             DepartmentName = d.Name
                                         };
                    Console.WriteLine("Employee Code	EmployeeName	DepartmentName");
                    foreach (var data in rightOuterJoin)
                    {
                        Console.WriteLine(data.EmployeeCode + "		" + data.EmployeeName + "		" + data.DepartmentName);
                    }
                }

     查询结果:


    Full outer join(产生员工表,部门表的并集,以 null 填充空值)

    SQL :

    SELECT e.Code,e.Name,d.Name FROM EmployeeMaster  as e FULL OUTER JOIN DepartmentMaster as d ON e.DepartmentId = d.DepartmentId  

     查询结果:

  • 相关阅读:
    Vs2010 编辑器自动提示crash的解决办法
    史丹佛毕业25年 我最有钱的同学是...zz
    Workerman3 创建wss服务 利用apache代理wss
    vue面试装X知识汇总
    接:this is incompatible with sql_mode=only_full_group_by
    vue2 nuxtjs 使用与安装
    linux 升级安装最新版本的composer2.0
    Ubuntu20.04LTS 添加环境变量
    this is incompatible with sql_mode=only_full_group_by
    CC2420与IEEE802.15.4关系
  • 原文地址:https://www.cnblogs.com/llsfast/p/7569748.html
Copyright © 2011-2022 走看看