【发布时间】:2013-05-08 13:38:33
【问题描述】:
我在 .NET 3.5 上使用实体框架,但我终其一生都无法弄清楚如何编写一些 Linq 来遍历以下设计:
基本上,我试图确定用户是否具有特定 EntityType 的权限 (EntityAction)。现在用户和角色在 Active Directory 中维护 - 但系统可以进行查找以查找用户所属的角色/组。
假设我有以下数据:
实体类型
EntityTypeId:1
名称:实体一
用户
用户 ID:1
账户名:安德斯
角色
角色 ID:1
帐户名:我的角色
实体动作
EntityActionId: 1
名称:做点什么
RoleEntityActionAssociation
(Role 和 EntityAction 之间的关联)
EntityActionId: 1
角色 ID:1
我将用户(来自 Active Directory)的组名存储在列表中:
List<string> groupNames = new List<string>();
问题
但是,我试图拼凑一些 Linq,以找出用户(或他在 List groupNames 中分配的角色之一)是否与给定 EntityType 的特定 EntityAction 相关联。
// get reference to the user
User user = context.Users.Where(x => x.AccountName == "Andez").FirstOrDefault();
// get reference to the entity type we want to query
EntityType et = context.EntityTypes.Where(x => x.Name == "Entity One").FirstOrDefault();
// get list of all entity actions for the user
var result = from ea in et.EntityActions
where ea.EntityActionId == 1 && (ea.Users.Contains(user) || ea.Roles.Count(r => groupNames.Contains(r.AccountName)) > 0)
select ea;
当然我的查询在上面不起作用 - 它不返回任何结果 (result.ToList().Count == 0)
我需要这方面的指示。
谢谢
【问题讨论】:
-
避免使用 FirstOrDefault 当您期望一个且只有一个结果并且如果找不到就会出现错误,使用 .Single()
标签: c# frameworks entity