我开始在新项目中使用Entity Framework,看看它是否有效。
但是我陷入了需要加入5个表的部分。我很确定它们之间的关系没问题,我可以选择仅使用.Include(x => x.table)
三个(因为我在网上找到),而且我知道我需要使用Join()
,但我不知道#39;不知道如何。
SQL中的select是:
SELECT
Module.*
FROM
UserGroup as ug
INNER JOIN
Group as g ON ug.IdGroup = g.IdGroup
INNER JOIN
GroupFunctionality as gf ON g.IdGroup = gf.IdGroup
INNER JOIN
Functionality as f ON gf.IdFunctionality = f.IdFunctionality
INNER JOIN
Screen as s ON f.IdScreen = s.IdScreen
INNER JOIN
Module as m ON s.IdModule = m.IdModule
WHERE
ug.IdUser = 1
答案 0 :(得分:0)
使用LINQ to Entities并假设DbSet上下文属性名称与表名相同,这是使用C#表达式的查询:
from ug in db.UserGroup
join g in db.Group on ug.IdGroup equals g.IdGroup
join gf in db.GroupFuncionality on g.IdGroup equals gf.IdGroup
join f in db.Funcionality on gf.IdFuncionality equals f.IdFuncionality
join s in db.Screen on f.IdScreen equals s.IdScreen
join m in db.Module on s.IdModule equals m.IdModule
where ug.IdUser == 1
select m
如果你想使用lambda表达式样式的Join
方法,这里有多个连接语法(用LINQPad从上面的语法转换):
db.UserGroup.Join(db.Group, ug => ug.IdGroup, g => g.IdGroup, (ug, g) => new { ug = ug, g = g })
.Join(db.GroupFuncionality, temp0 => temp0.g.IdGroup, gf => gf.IdGroup, (temp0, gf) => new {temp0 = temp0, gf = gf})
.Join(db.Funcionality, temp1 => temp1.gf.IdFuncionality, f => f.IdFuncionality, (temp1, f) => new {temp1 = temp1, f = f})
.Join(db.Screen, temp2 => temp2.f.IdScreen, s => s.IdScreen, (temp2, s) => new {temp2 = temp2, s = s})
.Join(db.Module, temp3 => temp3.s.IdModule, m => m.IdModule, (temp3, m) => new {temp3 = temp3, m = m})
.Where(temp4 => temp4.temp3.temp2.temp1.temp0.ug.IdUser == 1)
.Select(temp4 => temp4.m)
CMIIW。