2013-12-08 5 views
0

AspNet.Identity에서 특정 역할을 가진 사용자 수를 가장 잘 계산하는 방법은 무엇입니까? 사용자를 통한 반복은 당밀보다 느립니다. 매우 느린 코드는 다음과 같습니다.AspNet.Identity (회원이 아님)의 역할에있는 사용자 수를 계산하십시오.

public static async Task<string> GetNumUsersInRole(this HtmlHelper helper, string roleName) 
{ 
    int num = 0; 
    using (ApplicationDbContext db = new ApplicationDbContext()) 
    { 
     using (UserManager<ApplicationUser> um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) 
     { 
      await (from u in db.Users select u).ForEachAsync(user => 
       { 
        if (um.IsInRole(user.Id, roleName)) num++; 
       }).ConfigureAwait(false); 
     } 
     return num.ToString(); 
    } 
} 

답변

2

시도해보십시오.

using (ApplicationDbContext db = new ApplicationDbContext()) 
{     
    IdentityRole myRole= db.Roles.First(r => r.Name == roleName); 
    Int32 count = db.Set<IdentityUserRole>().Count(r => r.RoleId == myRole.Id); 
    return count; 
} 
+0

엄청난 도움을 주셨습니다. jd4u. 고맙습니다! 비동기 작업을 사용하고 흥미롭게도 CountAsync가 .ConfigureAwait (false)로 통화를 추가하지 않으면 반환하지 않습니다. – Ungaro