2009-06-24 63 views
0

我有一个Pages表,我有一个PageId的PagesRoles表,链接到ASP.Net成员角色表的表和Pages表。创建外键到ASP.Net角色表

我想以某种方式返回一个链接到当前登录的用户角色的页面。

用户可能有多个角色。一个页面可以有多个角色来对付它。

我有一个页面类具有IQueryable的外键属性。 PageRoles拥有的IQueryable到ASPNET角色表(IQueryable的)和IQueryable的

感谢

编辑:

用亚当的回答让具有分配给它的角色相匹配的当前一个所有页面登录用户的角色我有一个额外的问题。我有一个菜单表具有一个PageID外键和一个CategoryID。

我想返回CategoryID为4的所有菜单项。对于那些有PageID的我需要确保允许用户根据他的角色查看该页面。我认为亚当的质疑会做到这一点。所以我想我需要的是一个UNION,返回PageID为null且CategoryID为4的所有菜单项,并返回CategoryID为4的所有菜单项并加入当前用户角色在该ASPNetRole中的Page-> PageRole-> ASPNetRole结果。

回答

0

如果你使用的亚音速3类似下面的查询应该工作:

var pagesForUser = from pages in Pages.All() 
    join pagesRoles in PagesRoles.All() on pages.Id equals pagesRoles.PageID 
    join roles in Roles.All() on pagesRoles.RoleId equals roles.Id 
    where User.GetRoles().Contains(roles.Name) 
    select pages; 
+0

那布里尔,谢谢。我真的很努力与LINQ的东西和亚音速使用正确的语法,但这是一个不同的问题。 我有一个额外的问题,我应该提到。我有一个具有PageID列的菜单表。并非所有的菜单项都有一个PageID,但是对于那些我需要做查询的人,但我想将它合并,以便我可以从pageid为空或查询的菜单中选择所有菜单项。我在这里概述了这个问题 - 如果它有帮助,请参阅http://stackoverflow.com/questions/1038309/reengineer-sql-into-subsonic-linq。希望你明白我的意思。再次感谢 – Jon 2009-06-25 11:07:01