我有以下型號:多對多關係上的實體框架Linq查詢?
public class ApplicationUser : IdentityUser<string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
public bool HasPermission(string permission)
{
return Roles.Any(r => r.Role.Permissions
.Any(p => p.Name == permission));
}
// Some other Stuff
}
public class ApplicationRole : IdentityRole<string, ApplicationUserRole>
{
public ApplicationRole(string name) : this()
{
this.Name = name;
}
public virtual ICollection<Permission> Permissions { get; set; }
}
public class ApplicationUserRole : IdentityUserRole
{
public ApplicationUserRole(): base() { }
public virtual ApplicationRole Role { get; set; }
}
public class Permission
{
public byte Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ApplicationRole> Roles { get; set; }
}
基本上他們映射到五個表:用戶,角色的UserRole,權限和RolePermissions - 目前我沒有爲RolePermission的典範 - 我需要一個?
我想使用與lambda表達式LINQ給定用戶的權限列表,類似下面的SQL的東西:
Select p.Id, p.Name
From Permission p
inner join RolePermission rp on rp.PermissionId = p.Id
inner join UserRole ur on ur.RoleId = rp.RoleId
where ur.UserId = 'xyz'
我不知道我開始得到一個列表,它的實體使用LINQ的權限 - 我只能使用以下方法設置角色:
var permissions = _context.Users.Where(u => u.Id == userId)
.SelectMany(r => r.Roles.SelectMany(p => p.Role.Permissions))
.ToList();
任何想法?
也許LinqKit可以幫助你。 http://codigosimples.net/2014/05/09/criando-query-dinamicas-entity-framework-com-linqkit/ – Jhonathan
'SelectMany(r => r.Roles)' –
@Gert'SelectMany( r => r.Roles)'給我一個權限列表? – adam78