Pet*_*zek 6 linq-to-entities entity-framework entity-framework-6
看起来Linq to Entities不支持Aggregate方法.我需要将这.Select(a => a.Permissions).Aggregate((a, b) => a | b)部分更大的表达式重写为Linq to Entities所理解的内容.可能吗?
也许我应该更好地解释一下我在做什么.我需要根据这些组织者的用户权限从数据库中获取组织者的集合.权限存储为位标志,并且是以下各项的组合:
所以我有一个带有以下签名的方法
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);
Run Code Online (Sandbox Code Playgroud)
简化它是这样的:
organizers = organizers.Where(o => ((
DefaultOrganizerPermissions |
OwnerOrganizerPermissions |
UserPermisions |
RolePermissions
) & requiredPermissions) == requiredPermissions);
Run Code Online (Sandbox Code Playgroud)
问题是用户可以是多个角色的成员,因此RolePermissions实际上是多个权限,我需要使用按位OR将其展平.但是,如果不支持Aggregate呢?
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |