Итак, мне нужно создать/вернуть словарь из результатов Linq Query. Я пробовал все, что я могу придумать, и у меня все время возникают проблемы. Вот что я сейчас пытаюсь ...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;
}
}
всякая помощь вообще была бы весьма признательна. то, что я ищу, чтобы быть возвращенным из этого, является Словарем, где Ключ является объектом entityId или EntityManager.EntityId и Value (s) являются массивом связанных ролей.
В настоящее время во время компиляции я получаю следующие две ошибки, а в других попытках были ошибки, похожие, но не точные для них.
Error 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 < TKey, Sqor.Database.DbEntityManagerRoleAssignment>' на 'System.Collections.Generic.Dictionary < INT, INT []>'
ОБНОВЛЕНИЕ - Рабочий раствор (Благодаря @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;
}
}
Что он сейчас делает в сравнении с тем, что вы хотите? – Adam
Почему вы хотите использовать словарь с одной парой? Метод принимает один идентификатор пользователя, поэтому этот словарь не будет содержать более одной ключевой пары. Пусть он возвращает 'int []'. –
ваше право, я отредактировал свой код, чтобы лучше отобразить, что мне нужно ... – haltandcode