2013-10-16 1 views
0

에게 돌아갑니다 가입 I 다음으로 LINQ 문이 있습니다Linq는이 편평한 목록

var permissions = (from ru in RoleUserStore 
        join role in RoleStore on ru.RoleId equals role.Id 
        where ru.UserId == user.Id 
        select role.Permissions).ToList(); 

내 결과가 List<ICollection<Permission>>입니다. 모든 역할에서 플랫 목록을 가지려면이 작업을 올바르게 수행하려면 어떻게해야합니까? 나는 이것을하는 방법을 이해할 수 없었다.

+2

SelectMany는 필요한 부분이라고 생각합니다. – stevepkr84

+1

그리고'.Distinct()'를 추가하여 모든 복사본을 잘라낼 수 있습니다. –

답변

4

ToList()SelectMany(x => x).ToList()으로 바꿉니다.

0

당신은이 SelectMany가하는 내가 MSDN을 인용 무엇 SelectMany

var result = (from ru in RoleUserStore 
       join role in RoleStore on ru.RoleId equals role.Id 
       where ru.UserId == user.Id 
       select role.Permissions) 
       .SelectMany(user => user).ToList(); 

사용할 수 있습니다. 쿼리 구문에

Projects each element of a sequence to an IEnumerable(Of T) and flattens the resulting sequences into one sequence.

3

사용 SelectMany : 당신이 PermissionEqualsGetHashCode를 구현해야

var permissions = from ru in RoleUserStore 
        join role in RoleStore on ru.RoleId equals role.Id 
        where ru.UserId == user.Id 
        from permission in role.Permissions 
        select permission; 

// if you don't want repeating permissions use Distinct: 
List<Permission> permissionList = permissions.Distinct().ToList(); 

참고 의미 Distinct을 사용합니다.

관련 문제