查询列表属性中包含另一个列表中的所有内容的所有实体



我有3个实体,用户,任务和权限。用户可以拥有多个权限。任务还具有许多与之关联的权限。我试图在我的查询中捕获的想法是:我的任务需要由具有任务所需的所有正确权限的用户完成。

我正在努力查询。我想这就是我需要的:

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

但是我得到一个异常:

无法创建"权限"类型的常数值。只有原始类型(如Int32, String和Guid)在此支持上下文。

感谢任何帮助,建议或意见。

不传递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();

异常是由您的列表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的对象。

相关内容

  • 没有找到相关文章

最新更新