linq to sql内链接,左右链接(示例)
linq to sql内链接,左右链接(示例)
2011-06-16 17:37:29| 分类: linq to sql |字号 订阅
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);
}