entity-framework – 实体聚合方法替换的链接
看起来 Linq to Entities不支持Aggregate方法.我需要重写这个.选择(a => a.Permissions).Aggregate((a,b)=> a | b)更大表达式的一部分到Linq to Entities理解的东西.可能吗? 也许我应该更好地解释一下我在做什么.我需要根据这些组织者的用户权限从数据库中获取组织者的集合.权限存储为位标志,并且是以下各项的组合: > DefaultOrganizerPermissions – 每个管理器都有一些默认权限 所以我有一个带有以下签名的方法 public IQueryable< Organizer> GetOrganizers(Person person,OrganizerPermissions requiredPermissions) 在里面有一个像这样的代码 organizers = organizers.Where(o => (( // Default permissions DefaultOrganizerPermissions | // Owner permissions (o.OwnerId == person.Id ? OwnerOrganizerPermissions : 0) | // Personal permissions (o.AccessIdentifier.Accesses.FirstOrDefault(a => a.Accessor is PersonalAccessor && (a.Accessor as PersonalAccessor).PersonId == person.Id) != null ? (OrganizerPermissions)o.AccessIdentifier.Accesses.FirstOrDefault(a => a.Accessor is PersonalAccessor && (a.Accessor as PersonalAccessor).PersonId == person.Id).Permissions : 0) | // Role permissions (o.AccessIdentifier.Accesses.Any(a => a.Accessor is RoleAccessor && (a.Accessor as RoleAccessor).Role.RoleMembers.Any(rm=>rm.PersonId == person.Id)) ? (OrganizerPermissions)o.AccessIdentifier.Accesses.Where(a=> a.Accessor is RoleAccessor && (a.Accessor as RoleAccessor).Role.RoleMembers.Any(rm => rm.PersonId == person.Id)).Select(a=>a.Permissions).Aggregate((a,b) => a | b) : 0) ) & requiredPermissions) == requiredPermissions); 简化它是这样的: organizers = organizers.Where(o => (( DefaultOrganizerPermissions | OwnerOrganizerPermissions | UserPermisions | RolePermissions ) & requiredPermissions) == requiredPermissions); 问题是用户可以是多个角色的成员,因此RolePermissions实际上是多个权限,我需要使用按位OR将其展平.但是,如果不支持Aggregate呢? 如果数据量不是非常大,您可以考虑在Select(…)语句之前调用.ToList()将数据读入内存,然后执行Aggregate as Linq to Objects(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |