簡體   English   中英

實體框架-Linq查詢列表中的值

[英]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)

我需要對此的指示。

謝謝

EF設計

也許您需要按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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM