这里是否可以使用 lambda 表达式



我正在使用 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));

相关内容

  • 没有找到相关文章

最新更新