C#Linq查询返回Dictionary <int,int []>

时间:2016-07-12 14:46:35

标签: c# arrays linq dictionary int

好的,所以我需要从Linq查询的结果中创建/返回一个Dictionary。我已经尝试了我能想到的所有事情并继续遇到问题。这是我目前正在尝试的......

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的数组。

目前我在编译时遇到以下两个错误,其他尝试的错误与此类似但不完全相同。

  

错误11方法&#39; System.Linq.Enumerable.ToDictionary&lt; TSource,TKey&gt;的类型参数(System.Collections.Generic.IEnumerable,System.Func&lt; TSource,TKey&gt;,System.Collections.Generic。的IEqualityComparer&LT; TKEY的&GT;)&#39;无法从使用中推断出来。尝试明确指定类型参数。

     

错误12无法隐式转换类型&#39; System.Collections.Generic.Dictionary&lt; TKey,Sqor.Database.DbEntityManagerRoleAssignment&gt;&#39; to&#39; System.Collections.Generic.Dictionary&lt; int,int []&gt;&#39;

更新 - 工作解决方案(感谢@D Stanley)

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 个答案:

答案 0 :(得分:1)

听起来您希望按实体ID进行分组,并将关联的角色ID投影到数组中:

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;
}