好的,所以我需要从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;
}
}
答案 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;
}