2

3 つのエンティティ、ユーザー、タスク、権限があります。ユーザーは多くの権限を持つことができます。タスクには、関連付けられた多くの権限もあります。クエリでキャプチャしようとしているアイデアは次のとおりです。私のタスクは、タスクに必要なすべての適切な権限を持つユーザーによって実行される必要があります。

クエリに苦労しています。これが必要だと思います:

var userList = context.Users
                      .Include("Permissions")
                      .Where(x => neededPermissionFromTask.Except(x.Permissions).Count() == 0).ToList();

しかし、例外があります:

タイプ「権限」の定数値を作成できません。このコンテキストでは、プリミティブ型 (Int32、String、および Guid など) のみがサポートされます。

ヘルプ、提案、コメントをお待ちしております。

4

2 に答える 2

1

Permission オブジェクトのリストを渡す代わりに、それらの権限の ID を渡します。

var ids = neededPermissionFromTask.Select(p => p.Id).ToList();
var userList = 
     context.Users.Include("Permissions")
            .Where(u => ids.Except(u.Permissions.Select(p => p.Id)).Count() == 0)
            .ToList();
于 2013-01-09T20:31:05.610 に答える
0

例外はリストが原因ですneededPermissionFromTask- Entity Framework はPermissionオブジェクトのリストを処理する方法を知りません。

ID を持つタスクに必要なすべての権限を持つすべてのユーザーを見つけますtaskId

var users = context.Users
                   .Where(user => context.Tasks
                                         .Single(task => task.Id == taskId)
                                         .Permissions
                                         .All(permission => user.Permissions
                                                                .Contains(permission)))
                   .ToList();

うまくいくかどうかはわかりませんPermissions.Contains(permission)-質問に記載されているのと同じエラーが発生する可能性があります。しかし、簡単な回避策があります。オブジェクトがセットに含まれているかどうかを調べる代わりに、同じ ID を持つオブジェクトを探すだけです。

于 2013-01-09T20:32:42.563 に答える