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- 实体框架不知道如何处理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 回答