2012-03-23 113 views
1

我有一个多对多的用户和组之间的关系,我有一个表可以包含一个组的权限。因此,实体看起来像:实体框架,多对多关系和查询

public class Group 
{ 
    public int Id { get; set; } 
    public virtual ICollection Users { get; set; } 
} 

public class User 
{ 
    public int Id { get; set; } 
    public virtual ICollection Groups { get; set; } 
} 

public class Permission 
{ 
    public int Id { get; set; } 
    public virtual Group { get; set; } 
    public int Value { get; set; } 
} 

我想知道我是如何找出适用于用户(如适用者是任何组用户所属)的权限。

在数据库中会有一个名为UserGroups的映射表。如果我有访问到,LINQ查询看起来是这样的:

var permissions = 
    from p in MyContext.Permissions 
    join m in this.DbContext.UserGroups on p.GroupId equals m.GroupId 
    where m.UserId.Equals(theUserId) 
    select g; 

但是(见my related question),因为我没有访问映射表,我不知道要找到最好的方式适用的权限。什么是最好的方式来做到这一点?

感谢您的帮助, 埃里克

回答

2

尝试

var permissions = MyContext.Permissions 
       .Where(p => p.Group.Users.Any(u => u.Id == theUserId));