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  

     查询结果:

  • 相关阅读:
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Navicat查询哪些表有指定字段名
  • 原文地址:https://www.cnblogs.com/llsfast/p/7569748.html
Copyright © 2011-2022 走看看