我的代码是:
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(...)
,但我不知道如何比较我正在扮演的用户的角色,并具有特定的角色。
我的角色是老师,管理员或学生。
总而言之,仅过滤角色"老师"的用户。
假设您正在使用ASP.NET提供的身份框架,则可以使用UserManager实现这一目标。
在usermanager中,它具有适合您的函数,即getUserSinroleasync(string rolename(。这将返回您的角色列表。
您只能做
var userThatYouWant = await _userManager.GetUsersInRoleAsync("RoleName");
和voila,列表将包含所有用户,其中包含您指定的角色。
这是假设您是否正确初始化了_usermanager。
您可以为您编写一个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")));
一种简单的方法是使用Identity的Usermanager类。它具有 userInrole 函数,可返回bool。您可以做的是通过用户迭代并检查此功能。
样本:
foreach(var user in Users)
{
var isInRole = UserManager.UserInRole(user, "RoleName");
}
也许您可以尝试:db.teachings.include(d => d.course(.include(d => d.group(.include(d => d.user.Where(US => ur.role => ur.role =="老师"((; <<<<<<<</p>
我希望这会有所帮助!