2017-12-31 91 views
1

ユーザの役割に基づいて自分の活動をフィルタリングしようとしています。マネージャーはロールManagerを含むアクティビティのみを表示することができます。詳細は以下を参照してください。RavenDb 4:文字列の配列の文字列が異なる文字列に存在するかどうかを確認してください。

データ:クエリ

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

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

エラー:アクティビティフィルタの結果を期待

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" 
     ] 
    }, 
} 

クエリ

私は間違いをしています。明らかに私は何か間違っています。これは正しい方法ですか、それとも良いことがありますか?

答えて

2

これは代わりに、これを試して、クエリ時に計算を行うためにRavenDBを必要とします。

.Where(x => x.Roles.In(user.Roles))In拡張メソッド、Raven.Client.Linq、IIRCのためのusingステートメントを追加する必要がある場合があります)。

+0

チャームのように働いた。ありがとうございました! –

関連する問題