我有像这样的模式。 菜单 - > Pages-> PageRoles-> ASPNetRoles
菜单有一个类别ID。
我想用6类别ID所有菜单项返回。
一些菜单项有PAGEID的FOREIGH关键。 网页中可以对他们的1个或多个角色。 我可以查看当前登录的用户的角色,并确保他们在结果通过连接表。
我想用6类别ID,并为那些有PAGEID的用户角色必须在指定页面这些角色所有菜单项返回。
我能想到的唯一方法是做一个工会,但我这样做是亚音速时失败。 以下作品。
var dd = (from menu in Menu.All().Where(x => x.PageID == null && x.CategoryID == 6) select menu);
var ss = from menu2 in Menu.All()
join pages in WebPage.All() on menu2.PageID equals pages.ID
join pagesRoles in PageRole.All() on pages.ID equals pagesRoles.PageID
join roles in aspnet_Role.All() on pagesRoles.RoleId equals roles.RoleId
where Roles.GetRolesForUser().Contains(roles.RoleName) &&
menu2.CategoryID == 6
select menu2;
如何合并的结果?
这样做失败:
var dd = (from menu in Menu.All().Where(x => x.PageID == null) select menu).Union(
from menu2 in Menu.All()
join pages in WebPage.All() on menu2.PageID equals pages.ID
join pagesRoles in PageRole.All() on pages.ID equals pagesRoles.PageID
join roles in aspnet_Role.All() on pagesRoles.RoleId equals roles.RoleId
where Roles.GetRolesForUser().Contains(roles.RoleName)
select menu2);
编辑:
我可以在通过LEFT OUTER SQL结果连接(见下文),但再次转换到这个LINQ /亚音速失败。
SELECT * FROM MENU M
LEFT OUTER JOIN WEBPAGE P
ON P.ID = M.PAGEID
LEFT OUTER JOIN PAGEROLES R
ON R.PAGEID = P.ID
LEFT OUTER JOIN ASPNET_ROLES A
ON A.ROLEID = R.ROLEID
WHERE ((CATEGORYID = 1) OR ( CategoryID = 1 AND A.ROLENAME IN ('ADMINISTRATOR','USER')))
即使是一些简单的像这样的失败
var resu = from p in db.Menus
join pages in db.WebPages on p.PageID equals pages.ID
into temp from pages in temp.DefaultIfEmpty()
select p;