我担心我必须遗漏一些简单的东西,但是当我执行时:
var results = UserManager.Users.Where(u => u.mgr == appUser.org || appUser.org == "corp");
我得到一个符合我要求的IQueryable ApplicationUsers集合...... 除了...集合中的每个ApplicationUser都有一个Roles的属性(集合),它只包含UserId& RoleId而不是角色的名称。我相信在这个linq查询中添加一个.Include(" ???")应该允许我带回每个用户的角色名称......但我不能找到合适的表达方式到达那里。
如何检索分配中每个用户的角色名称?
答案 0 :(得分:2)
ApplicationUser 的 ASP.NET标识 属性 ApplicationUserRole 。此表是 ApplicationUsers 和 ApplicationRoles 之间的多对多关系。如果您想获得有关reles的其他详细信息,则必须按照自己的说法使用Include
:
var results = UserManager
.Users
.Where(u => u.mgr == appUser.org || appUser.org == "corp")
.Include(m => m.Roles.Select(r => r.Role));
正如@GeoffJames所说,您必须将using System.Data.Entity;
添加到您的使用列表中。
通常,您的自定义身份模型应如下所示:
public class ApplicationUserRole : IdentityUserRole
{
public ApplicationUserRole()
: base()
{ }
public virtual ApplicationRole Role { get; set; }
}
ApplicationRole应该继承I dentityRole<string, ApplicationUserRole>
public class ApplicationRole
: IdentityRole<string, ApplicationUserRole>
{
}
ApplicationUser应该继承IdentityUser<string, IdentityUserLogin, ApplicationUserRole, IdentityUserClaim>
public class ApplicationUser
: IdentityUser<string, IdentityUserLogin, ApplicationUserRole, IdentityUserClaim>
{
public string FirstName { get; set; }
public string LastName { get; set; }
.............
}
您还可以看到我的回答here,这可能有所帮助。