1

我在 .NET 3.5 上使用实体框架,但我一生都无法弄清楚如何编写一些 Linq 来遍历以下设计:

基本上我想弄清楚用户是否拥有特定EntityType的权限(EntityAction)。现在用户和角色在 Active Directory 中维护 - 但系统可以进行查找以查找用户所属的角色/组。

假设我有以下数据:

实体类型

实体类型 ID:1

名称:实体一

用户

用户 ID:1

账户名:安德斯

角色

角色 ID:1

帐户名称:MyRole

实体动作

实体操作 ID:1

名称:做点什么

角色实体动作关联

(Role 和 EntityAction 之间的关联)

实体操作 ID: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)

我需要这方面的指示。

谢谢

英孚设计

4

1 回答 1

4

也许您需要按 ID 检查用户,替换ea.Users.Contains(user)ea.Users.Any(us => us.UserId == user.UserId)

var result = from ea in et.EntityActions
                     where ea.EntityActionId == 1 && ea.Users.Any(us => us.UserId == user.UserId)
                     select ea;

更新 0

试试这个代码,它应该可以工作:

var result = from ea in et.EntityActions
                     where ea.EntityActionId == 1 &&
                         (ea.Users.Any(us => us.UserId == user.UserId) || ea.Any(r => groupNames.Contains(r.AccountName)))
                     select ea;
于 2013-05-08T13:45:13.437 回答