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);

}

你可能感兴趣的:(LINQ)