2016-10-06 5 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」を暗黙的に「」に変換できません。'ブール'。

ブロックの戻り型の一部が暗黙的に を代理人の戻り値の型に変換できないため、ラムダ式を目的の型に変換できません。

私は何が欠けていますか?

+1

where句は、返されるはずのものを示していません。これは、次のようなものでなければなりません: '.Mhere.Permissions.Intersect(userPermissionList、new PermissionComparer())。Count()> 0);' –

+0

または、MenuOptionsをユーザのパーミッションと組み合わせる別のロジック。私はそれらの2つのオブジェクト間のあなたの意図された論理が何か分かりません。 –

+0

@RickWolff、あなたのコメントは私のために一番うまくいった。私はそれを受け入れることができるように答えセクションに移動してくださいできますか? –

答えて

2

あなたの句を返すことになっているものを言っていません。

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

また、MenuOptionsとユーザーのアクセス許可を組み合わせた別のロジックです。私はそれらの2つのオブジェクト間のあなたの意図された論理が何か分かりません。

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

はIEnumerableを返しますが、Wh​​ereはブール論理を必要とします。

1

Intersectは、2つのコレクション間で一致するすべてのアイテムを返します。私はあなただけContainsをしたいと思う:

List<MenuOption> optionList = context.MenuOptions.Where(mo => userPermissionList.Contains(mo.Permissions, new PermissionComparer())); 
関連する問題