我的代码是:
public async Task<ActionResult> Index()
{
var teaching = db.Teachings.Include(d =>d.Course).Include(d=>d.Group).Include(d => d.User);
return View(await teaching.ToListAsync());
}
我想知道如何过滤某些角色,我的意思是,如果可以的话,我如何只过滤具有特定角色的用户。
我认为可能的解决方案可能是....Include(d => d.Users).Where(...)
,但我不知道如何比较我正在使用的用户与特定角色的角色。
我的角色是老师,管理员或学生。
总之,只过滤角色为“老师”的用户。
答案 0 :(得分:0)
一种简单的方法是使用Identity的UserManager类。它有一个 UserInRole 函数,它返回一个bool。您可以做的是遍历用户并检查此功能。
样品:
foreach(var user in Users)
{
var isInRole = UserManager.UserInRole(user, "RoleName");
}
答案 1 :(得分:0)
您可以编写一个linq为您执行此操作,选择与用户相关联的所有教师任何他们的角色等于教师,这样写的,供您参考
var teaching = db.Teachings
.Include(d =>d.Course)
.Include(d=>d.Group)
.Include(d => d.User)
.Include(d => d.User.Roles)
.Where(d => d.User.Roles.Any(r => r.Name == "teacher")));
答案 2 :(得分:-1)
也许你可以试试: db.Teachings.Include(d =&gt; d.Course).Include(d =&gt; d.Group).Include(d =&gt; d.User.Where(us =&gt; ur.Role ==&#34 ;老师&#34));
我希望这有帮助!
答案 3 :(得分:-1)
假设您使用的是ASP.net提供的Identity Framework,您只需使用UserManager即可实现。
在UserManager中,它有一个功能,即GetUsersInRoleAsync(string roleName)。这将返回角色中的用户列表。
你可以做到
var userThatYouWant = _userManager.GetUsersInRoleAsync("RoleName");
瞧,该列表将包含具有您指定角色的所有用户。
如果您已正确初始化_userManager,则假定这是假设。