zoukankan      html  css  js  c++  java
  • LINQ的左连接、右连接、内连接

    1、左连接:

    var LeftJoin = from emp in ListOfEmployees
    join dept in ListOfDepartment
    on emp.DeptID equals dept.ID into JoinedEmpDept
    from dept in JoinedEmpDept.DefaultIfEmpty()
    select new 
    {
    EmployeeName = emp.Name,
    DepartmentName = dept != null ? dept.Name : null 
    };

    2、右连接:

    var RightJoin = from dept in ListOfDepartment
    join employee in ListOfEmployees
    on dept.ID equals employee.DeptID into joinDeptEmp
    from employee in joinDeptEmp.DefaultIfEmpty()
    select new 
    {
    EmployeeName = employee != null ? employee.Name : null,
    DepartmentName = dept.Name
    };

    3、内连接:

    var query = from t in entitiy.TB_GCGL_ADA_USER
    join p in entitiy.TB_GCGL_ZY_ZYK
    on t.ETPRS_CODE equals p.ETPRS_CODE

    select new TB_USER_ZYK
    {
    USER_ID = t.USER_ID,
    USER_NAME = t.USER_NAME,
    USER_PASSWORD = t.USER_PASSWORD,

    };

     

     

     

    public static void InnerJoinTest()//内链接

    {

    DemoDataContext context = new DemoDataContext();

    context.Log = Console.Out;

    //方式一

    var query = from tb1 in context.RoleRow

    join tb2 in context.RoleFunctionRow on tb1.RoleId equals tb2.RoleId

    select new { RoleId = tb1.RoleId, RoleName = tb1.EN_Name, FunctionId = tb2.FunctionId };

    ObjectDumper.Write(query);

    //方式二

    var query2 =

    from tb1 in context.RoleRow

    from tb2 in context.RoleFunctionRow

    where tb1.RoleId == tb2.RoleId

    select new { RoleId = tb1.RoleId, RoleName = tb1.EN_Name, FunctionId = tb2.FunctionId };

    ObjectDumper.Write(query2);

    //var query3= from tb1 in context.RoleRow

    // join tb2 in context.RoleFunctionRow on tb1.RoleId equals tb2.RoleId

    // join tb3 in context.FunctionRow on tb2.FunctionId equals tb3.FunctionId

    // select new { RoleId = tb1.RoleId, RoleName = tb1.EN_Name,FunctionId=tb2.FunctionId,FunctionName=tb3.EN_Name }

    }

    public static void LeftJoinTest()//左右链接

    {

    int minRoleId = 1;

    DemoDataContext context = new DemoDataContext();

    context.Log = Console.Out;

    var query = from tb1 in context.RoleRow

    join tb2 in context.RoleFunctionRow on tb1.RoleId equals tb2.RoleId into tempT

    from tb3 in tempT.DefaultIfEmpty()// 关键在into tempT from tb3 in tempT.DefaultIfEmpty()

    where tb1.RoleId > minRoleId

    select new { RoleId = tb1.RoleId, RoleName = tb1.EN_Name, FunctionId = tb3.FunctionId };

    ObjectDumper.Write(query);

    }

  • 相关阅读:
    Layout布局
    了解java虚拟机—串行回收器(6)
    了解java虚拟机—JVM相关参数设置(2)
    了解java虚拟机—堆相关参数设置(3)
    了解java虚拟机—垃圾回收算法(5)
    了解java虚拟机—并行回收器(7)
    了解java虚拟机JVM的基本结构(1)
    了解java虚拟机—非堆相关参数设置(4)
    了解java虚拟机—CMS回收器(8)
    求FTP协议规范中文版
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/3320194.html
Copyright © 2011-2022 走看看