2017-12-31 46 views
1

사용자 역할을 기반으로 활동을 필터링하려고합니다. 관리자는 Manager 역할을 포함하는 활동 만 볼 수 있습니다. 자세한 내용은 아래를 참조하십시오.RavenDb 4 : 문자열 배열의 문자열이 다른 문자열 배열에 있는지 확인하십시오.

데이터 : 활동을 필터링의

var filtered = await context.Query<Activity>() 
        .Where(x => x.Roles.Any(y => user.Roles.Contains(y))) 
        .ToListAsync(); 

예상 결과 필터

var user = new User 
{ 
    Roles = [ 
     "Manager" 
    ] 
} 

var activities = new List<Activity> 
{ 
    new Activity 
    { 
     Description = "My First Activity", 
     Roles = [ 
      "Admin", 
      "Manager" 
     ] 
    }, 
    new Activity 
    { 
     Description = "My Second Activity", 
     Roles = [ 
      "Admin" 
     ] 
    }, 
    new Activity 
    { 
     Description = "My Third Activity", 
     Roles = [ 
      "Manager", 
      "Client" 
     ] 
    }, 
} 

쿼리 : 쿼리

[ 
    { 
     new Activity 
     { 
      Description = "My First Activity", 
      Roles = [ 
       "Admin", 
       "Manager" 
      ] 
     } 
     new Activity 
     { 
      Description = "My Third Activity", 
      Roles = [ 
       "Manager", 
       "Client" 
      ] 
     }, 
    } 
] 

오류를

System.InvalidOperationException : Can't extract value from expression of type: Parameter 

오류가 발생하므로 분명히 잘못된 것이 있습니다. 이것이 올바른 방법입니까 아니면 더 좋은 것이 있습니까? 이 쿼리시에 계산을 할 RavenDB이 필요

답변

2

대신,이 시도 :

.Where(x => x.Roles.In(user.Roles))합니다 (In 확장 방법, Raven.Client.Linq, IIRC에 대한 using 문을 추가해야 할 수도 있습니다).

+0

매력처럼 작동했습니다. 고맙습니다! –

관련 문제