我正在使用 ASP.Net 核心身份框架,我需要收集我的用户不属于的所有角色。所以,显然我可以这样做:
SSUser user = await userManager.FindByIdAsync(id);
var Roles = roleManager.Roles;
List<string> notUserRoles = new List<string>();
foreach (var role in Roles)
{
if (!await userManager.IsInRoleAsync(user, role.Name))
{
notUserRoles.Add(role.Name);
}
}
它有效。但是为了使用lambda表达式,你能告诉我,是否可以以某种方式使用lambda表达式?我已经尝试自己做了一段时间,问题是IdentityRole对象的User属性实际上并不是IdentityUser(在我的情况下是SSUser(。可能有明显的方法,我看不到它?
您可以通过拆分为 3 个操作来做到这一点:
// Select all tasks
var tasks = roles.Select(role =>
new {
Task = userManager.IsInRoleAsync(user, role.Name),
Role = role
}).ToList();
// Wait for completion
await Task.WhenAll(tasks.Select(t => t.Task));
// Filter the result and add it to notUserRoles
notUserRoles.AddRange(tasks
.Where (t => !t.Task.Result)
.Select(t => t.Role.Name));