diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs index 65a6ebaa64..81488b1f30 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs @@ -57,24 +57,23 @@ public class EfCoreIdentityUserRepository : EfCoreRepository> GetRoleNamesAsync( - IEnumerable userIds, + IEnumerable userIds, CancellationToken cancellationToken = default) { var dbContext = await GetDbContextAsync(); - var query = from userRole in dbContext.Set() + return await (from userRole in dbContext.Set() join role in dbContext.Roles on userRole.RoleId equals role.Id where userIds.Contains(userRole.UserId) - select new - { - userRole.UserId, - role.Name - }; - - var result = await query - .GroupBy(x => x.UserId) - .ToDictionaryAsync(x => x.Key, x => x.Select(r => r.Name).ToArray(), cancellationToken: cancellationToken); - - return result.Select(x => new IdentityUserIdWithRoleNames() { Id = x.Key, RoleNames = x.Value }).ToList(); + group new + { + userRole.UserId, + role.Name + } by userRole.UserId + into gp + select new IdentityUserIdWithRoleNames + { + Id = gp.Key, RoleNames = gp.Select(x => x.Name).ToArray() + }).ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetRoleNamesInOrganizationUnitAsync(