2016-10-06 109 views
0

我正在嘗試編寫主屏幕,以便給定用戶根據其權限看到菜單選項。基本上,通過每個菜單選項,查看需要查看哪些權限,然後檢查當前用戶是否具有任何權限。「不能將類型'System.Collections.Generic.IEnumerable <C3S.Models.Permission>'隱式轉換爲'bool'。」

我試圖用的代碼在首頁動作

var userPermissionList = currentUser.Permissions; 
List<MenuOption> optionList = context.MenuOptions.Where(mo => mo.Permissions.Intersect(userPermissionList, new PermissionComparer())); 

這些線路和我實施的IEqualityComparer的:

public bool Equals(Permission x, Permission y) 
    { 
     if (x.Id == y.Id && x.PermissionName.ToLower() == y.PermissionName.ToLower()) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     }; 
    } 

    public int GetHashCode(Permission obj) 
    { 
     return obj.Id.GetHashCode(); 
    } 
} 

然而,在運行時,我得到這些錯誤:

無法將類型 'System.Collections.Generic.IEnumerable'隱式轉換爲 '布爾'。

無法將lambda表達式轉換爲預期的委託類型,因爲 塊中的某些返回類型不會隱式地轉換爲委託返回類型的 。

我錯過了什麼?

+1

你的where子句並不是說應該返回什麼。它應該是這樣的:'.Where(mo => mo.Permissions.Intersect(userPermissionList,new PermissionComparer())。Count()> 0);' –

+0

或者另一種將MenuOptions與用戶的權限結合的邏輯。我不知道你在這兩個對象之間的邏輯是什麼。 –

+0

@RickWolff,您的評論對我最有效。你可以把它移到答案部分,我可以接受它嗎? –

回答

2

你的where子句沒有說什麼應該被退回。它應該是這樣的:

.Where(
    mo => mo.Permissions.Intersect(userPermissionList, new PermissionComparer()).Count() > 0); 

或其他邏輯,將MenuOptions結合到用戶的權限。我不知道你在這兩個對象之間的邏輯是什麼。

1
mo.Permissions.Intersect(userPermissionList, new PermissionComparer()) 

正在返回一個IEnumerable,但Where需要布爾邏輯。

1

Intersect返回兩個集合之間的所有匹配項目。我覺得你只是想Contains

List<MenuOption> optionList = context.MenuOptions.Where(mo => userPermissionList.Contains(mo.Permissions, new PermissionComparer())); 
相關問題