[英]Entity Framework - Linq to query where value in a list
我在.NET 3.5上使用Entity Framework,但我終生無法弄清楚如何編寫一些Linq來遍歷以下設計:
基本上,我試圖確定用戶是否具有特定EntityType的權限(EntityAction)。 現在,用戶和角色保留在Active Directory中-但是系統可以進行查找以查找用戶所屬的角色/組。
假設我有以下數據:
實體類型
EntityTypeId:1
名稱:實體一
用戶
用戶名:1
帳戶名稱:Andez
角色
角色編號:1
帳戶名稱:MyRole
實體動作
EntityActionId:1
名稱:做某事
RoleEntityActionAssociation
(角色和EntityAction之間的關聯)
EntityActionId:1
角色編號:1
我將用戶的組名(從Active Directory)存儲在列表中:
List<string> groupNames = new List<string>();
題
但是,我試圖拼湊一些Linq,以查明某個給定EntityType的用戶(或他在列表groupNames中分配的角色之一)是否與特定的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)
我需要對此的指示。
謝謝
也許您需要按ID檢查User,將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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.