我使用实体框架上.NET 3.5的列表,其中价值,我不能为我的生活弄清楚如何写一些LINQ到遍历了如下设计:实体框架 - 的LINQ查询在
基本上我试图弄清楚用户是否具有特定EntityType的权限(EntityAction)。现在用户和角色在Active Directory中维护 - 但系统可以执行查找来查找用户属于哪个角色/组。
假设我有以下数据:
的EntityType
EntityTypeId:1
名称:实体中的一个
用户
用户名:1
帐户名:Andez
角色
角色ID:1
帐户名:MyRole
EntityAction
EntityActionId:1
名称:只是做一些
RoleEntityActionAssociation
EntityActionId(角色和EntityAction之间的关联):1
角色ID:1
我存储组名用户(来自Active Directory):
List<string> groupNames = new List<string>();
问题
但是我试图拼凑一些LINQ到找出是否一个用户(或他在列表组名分配的角色之一)与给予的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()计数== 0)
我需要指点这个请。
感谢
避免使用FirstOrDefault,当你期望一个且只有一个结果,并且如果没有找到错误,使用.Single() – gareththegeek 2013-05-08 13:40:26