簡體   English   中英

將SQL選擇轉換為實體框架跨五個表聯接

[英]Transform SQL Select to Entity Framework Join across five tables

我開始在新項目中使用實體框架,以查看它是否有效。

但是我陷入了需要加入5張桌子的部分。 我很確定他們之間的關系還可以,我可以選擇使用.Include(x => x.table)僅三個(因為我在互聯網上找到了),而且我知道我需要使用Join() ,但我不知道如何

SQL中的選擇為:

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

使用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方法,請使用以下多種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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM