2016-07-12 17 views
0

私はLinqクエリの結果からディクショナリを作成/返す必要があります。私は考えることができるすべてについて試してきて、問題に取り組んでいます。ここに私が現在試みていることがあります...リターンするC#Linqクエリ<int,int[]>

public static Dictionary<int,int[]> GetEntityAuthorizations(int userId) 
    { 
     using (MyDb db = new MyDb()) 
     { 
      var query = db.EntityManagerRoleAssignments.Where(x => x.EntityManager.ManagerId == userId); 
      var entityId = query.Select(x => x.EntityManager.EntityId); 
      var roles = query.Select(x => x.RoleId).ToArray(); 
      var result = query.ToDictionary(entityId, roles); 
      return result; 
     } 
    } 

助けを借りてください。私がこれから返すために探しているのは、KeyがentityIdまたはEntityManager.EntityIdであり、Valueが関連するRoleIdの配列であるDictionaryです。

現在のところ、コンパイル時に次の2つのエラーが発生していますが、他の試みも同様のエラーですが、正確ではありません。メソッドの

エラー11型引数のSystem.Linq.Enumerable.ToDictionary < TSOURCE、TKEY>(System.Collections.Generic.IEnumerable、System.Func < TSOURCE、TKEY>、System.Collections.Generic。 IEqualityComparer < TKey>) 'を使用から推測することはできません。型引数を明示的に指定してみてください。

エラー12は、暗黙的に

'System.Collections.Generic.Dictionary <のint、int型[]>' にタイプ 'System.Collections.Generic.Dictionary <処理鍵、Sqor.Database.DbEntityManagerRoleAssignment>' に変換できません。

UPDATE - あなたはエンティティIDによってグループ化すると、アレイに関連する役割IDをプロジェクトのような作業溶液(スタンレーを@Dのおかげで)

public static Dictionary<int,int[]> GetEntityAuthorizations(int userId) 
    { 
     using (SqorDb db = new SqorDb()) 
     { 
      var query = db.EntityManagerRoleAssignments.Where(x => x.EntityManager.ManagerId == userId); 
      var entityGroups = query.GroupBy(x => x.EntityManager.EntityId); 
      var result = entityGroups.ToDictionary(e => e.Key, 
                g => g.Select(x => x.RoleId).ToArray() 
               ); 
      return result; 
     } 
    } 
+1

これは現在実行していることと、何をしたいのですか? – Adam

+5

なぜ1組の辞書が必要ですか?このメソッドは1つのユーザーIDを取り、この辞書には複数のkeyvalueペアが含まれないようにします。 'int []'を返すようにしてください。 –

+0

あなたの権利、私は私のコードを編集して、私が後に何を表示するかを... – haltandcode

答えて

1

ですね:

using (MyDb db = new MyDb()) 
{ 
    var query = db.EntityManagerRoleAssignments.Where(x => x.EntityManager.ManagerId == userId); 
    var entityGroups = query.GroupBy(x => x.EntityManager.EntityId); 
    var result = entityGroups.ToDictionary(e => e.Key, 
              g => g.Select(x => x.RoleId).ToArray() 
             ); 
    return result; 
} 
+0

これを試してみましょう。ありがとうDスタンリー。 – haltandcode

+0

私はこれが完璧なD Stanley作品だと思います。最初は3つのエントリー、最初のものは正しいもの、2つ目のものは0,0です。しかし、コードブロックが終了した後、GetEntityAuthorizationsには正しいセットが1つしかありませんでした。 – haltandcode

+0

うれしかったです。 Linqクエリを検査してデバッグするのは難しいことがあります。通常、中間結果を調べるのではなく、最終結果を確認する必要があります。 –

関連する問題