我有一個Dictionary<string, string>
叫roleList
。在這種情況下,roleList
列出角色和角色在層次結構上方的作用和角色 - 我需要保留與「鍵」角色匹配的項的鍵和值,並可以丟棄其餘部分。Filter Dictionary <string,string>使用LINQ select
我也可以訪問先前編寫的函數,它可以讓我知道用戶是否在特定角色(或角色數組)中(它只返回一個布爾值),但我不能說出用戶是什麼角色因爲用戶可能擁有多個角色。
都一樣,我需要知道用戶是否在特定角色。
不反覆的字典,一個For Each
,我目前有:
roleList.Select(x => IsInRoles(userInfoObj, new string[] {x.Key}) == true).ToList();
注意IsInRoles(params)
返回一個布爾值。另外請注意,userInfoObj
只是一個在其他地方定義的自定義對象,我實際上無法控制它。
上述語句總是無法過濾IsInRoles
返回false的錯誤。我應該改變什麼?
更新:根據評論,我試過簡單的.Where
選項並明確聲明...IsInRoles(...) == true
。它仍然無法過濾列表。我也明確地檢查過高角色是否包含較低角色(他們沒有)。要明確:
roleList.Where(x => IsInRoles(userInfoObj, new string[] {x.Key}) == true).ToList();
和
roleList.Where(x => IsInRoles(userInfoObj, new string[] {x.Key})).ToList();
都同樣會失敗。也就是說,我在字典裏有4個項目,有4個項目出來。測試IsInRoles
顯式工作正如我所料,這個函數沒有問題(我們已經使用了它多年)。問題是,where
和select
都不會濾除錯誤結果。
人們總是想知道的IsInRoles方法:
public static bool IsInRoles(CurrentUserInfo user, string[] roles, string siteName, bool hasAllRoles) {
聽起來像你不想使用'選擇'。你想使用['Where'](https://msdn.microsoft.com/en-us/library/bb534803%28v=vs.100%29.aspx)。 –
你的意思是'roleList.Where(r => isInRoles(userInfoObj,r.Key))'? –
。其中(「true statement」)不會過濾掉「false」結果。編輯:堅持下去,我需要檢查角色層次結構,看看更高版本是否包含降低...將更新。 – MetalPhoenix