2

특정 역할을 가진 모든 사용자에게 사용자 이름 목록을 가져 오려고합니다.엔티티 참조를 통해 올바른 방식으로 반복하고 있습니까?

모든 사용자를 포함시키고 해당 역할과 연결된 모든 사용자를 순환하는 가장 좋은 방법은 UsersReference 입니다.

나는 foreach (role.Users에서 User 사용자)를 할 수 없다는 것을 알아 차렸지만 UsersReference는 작동하는 것처럼 보였지만 어떻게해야 할 것인가? 참조를 통해 가나 요?

using (var context = new MyEntities()) 
     { 
      List<string> users = new List<string>(); 

      Role role = (from r in context.Roles.Include("Users") 
         where r.RoleName == roleName 
         select r).FirstOrDefault(); 

      foreach (User user in role.UsersReference) 
       users.Add(user.UserName); 

      return users.ToArray(); 
     } 

답변

0

ToList()

foreach(var user in role.Users.ToList()) {...}

+0

IEnumerable 만 필요한 경우 세 번째 모음이 만들어집니다. 'List users','.ToArray()'의 결과 및이'.ToList()'의 결과 –

+1

질문은 사용자 이름이 아닌 모든 사용자를 반복하는 방법이었습니다. – ktingle

+0

질문 : 특정 역할을 가진 모든 사용자에게 사용자 이름 목록을 가져 오려고합니다. 질문에 제공된 코드는 지정된 역할의 모든 사용자의 사용자 이름을 포함하는'string []'을 반환합니다. 사용자를 통한 루핑이 과제 일지라도 ToList는 여기에서 불필요합니다. –

2

그것은 당신의 역할 테이블이 사용자 속성이 있음을 가능으로 원래 foreach 루프를 사용해보십시오? 나는 네비게이션 프로퍼티의 이름을 UsersReference가 아니라 Users라고 명명 할 것이라고 생각한다. 나는 EF를 사용하지 않지만 필자가 본 모든 예제는 테이블 다음에 속성의 이름을 지정합니다. AFAIK는 IEnumerable을 항상 구현하므로 foreach에서 사용할 수 있어야합니다. 당신이 권리를 설정 한 경우

당신은 필요가 있다고 생각 :

using (var context = new MyEntities()) 
{ 
    return context.Roles 
        .Where(r => r.RoleName == roleName) 
        .SelectMany(r => r.Users) 
        .Select(u => u.UserName) 
        .ToArray(); 
} 
+1

관련 User 객체가 활성 ObjectContext 내부에서 액세스되기 때문에 Include 메소드가 필요하지 않습니다. –

+0

@Enrico - 감사합니다. 실수로 (복사/붙여 넣기) 남겨 두었습니다. – tvanfosson

-1

.ToArray() 도우미 당신이 이런 식으로 할 경우 .Include("Users")에 대한 필요가 없다는 것을 대신

using (var context = new MyEntities()) 
{ 
    return (from role in context.Roles 
      where role.RoleName == roleName 
      from user in r.Users 
      select user.UserName).ToArray(); 
} 

주를 사용합니다. 쿼리에 r.Users을 사용하면 쿼리를 포함 할 필요없이 하나의 쿼리에 포함됩니다. 활성 ObjectContext에서 사용되기 때문입니다.

하나의 부가 메모,이 메서드의 메서드 서명이 무엇인지 확실하지 않지만이 경우에는 IEnumerable<string>string[]보다 적합 할 수 있습니다. 다른 유형의 배열을 만들지 않고 나중에 구현을 조정할 수 있기 때문입니다. 컬렉션.

관련 문제