Как назначить значения запроса LINQ другому словарю - PullRequest
1 голос
/ 03 февраля 2011

Как присвоить результат запроса Linq словарю ...

 public Dictionary<string, Privilege> GetAllPermissionsByGroupId(string groupid)
    {

        string[] Roles = new string[] { "e8b08a45-9cb5-4ac9-8c6c-9dfe4ac23966$Moderator" };

        List<RolePrivilege> RoleList = new List<RolePrivilege>();
        List<Privilege> PrivilegeList = new List<Privilege>();

        Dictionary<string, RolePrivilege> Role = PrivilegeProxy.GetPrivilegesForRoles("744A2BE3-846E-4E4A-9796-DAF9C743E8FF", Roles);
        RoleList = Role.Values.ToList();


        Dictionary<string, Privilege> Privilege = PrivilegeProxy.GetPrivilegesbyModuleIds(new string[] { "Groups" });
        PrivilegeList = Privilege.Values.ToList();

        var identicalQuery = from roles in RoleList
                            join privileges in PrivilegeList on roles.PrivilegeName equals privileges.Name
                           select new { Roles = roles, Privileges = privileges };


        Dictionary<string, Privilege> Result=new Dictionary<string,Privilege>();
         Result=?


         return Result;

    }

Ответы [ 2 ]

1 голос
/ 03 февраля 2011

На самом деле ваш код не иллюстрирует то, что вы хотите поместить в словарь.Что должно быть ключевым?Строка, связанная с RolePrivilege?

Не важно, я бы порекомендовал работать с парами вместо значений в ваших словарях:

var Roles = new string[] { "e8b08a45-9cb5-4ac9-8c6c-9dfe4ac23966$Moderator" };
Dictionary<string, RolePrivilege> Role = PrivilegeProxy.GetPrivilegesForRoles("744A2BE3-846E-4E4A-9796-DAF9C743E8FF", Roles);
Dictionary<string, Privilege> Privilege = PrivilegeProxy.GetPrivilegesbyModuleIds(new string[] { "Groups" });

var identicalQuery = from roles in Role
                     join privileges in Privilege on roles.Value.PrivilegeName equals privileges.Value.Name
                     select new { Roles = roles, Privileges = privileges };

Dictionary<string, Privilege> Result = identicalQuery.ToDictionary(_ => _.Roles.Key, _.Privileges.Value);

EDITED

Хорошо, давайте представим содержимое обоихсловари:

  • Role dic = [{"aaa", RolePrivilege1}, {"bbb", RolePrivilege2}, {"ccc", RolePrivilege3}]
  • Privilege dic = [{"aaa", Privilege5}, {"bbb", Privilege6}, {"ddd", Privilege7}]

Что вы ожидаете в качестве вывода?Я полагаю, вы хотите получить следующую последовательность:

  • Result = [{"aaa", Privilege5}, {"bbb", Privilege6}]

Правильно?Если да, этот запрос поможет:

        var Result = Role
            .Join(Privilege,
                outer => outer.Key,
                inner => inner.Key,
                (outer, inner) => new { Str = outer.Key, Privilege = inner.Value })
            .ToDictionary(_ => _.Str, _ => _.Privilege);
0 голосов
/ 03 февраля 2011

Вы, наверное, ищете Enumerable.ToDictionary(), но я могу только догадываться, что вы пытаетесь сделать ...

var query = from employee in employees
            join privilege in privileges
              on employee.PrivilegeName equals privilege.Name
            select new
            {
                Employee = employee,
                Privilege = privilege
            };

var dictionary = query.ToDictionary(o => o.Employee);

Ваши переменные сбивают с толку, потому что employeeAимеет тип RolePrivilege и employeeB имеет тип Privilege.Кроме того, было бы лучше сделать соединение по идентификатору, а не по имени (если это возможно).

Возможно, этот вопрос поможет:
Linq-to-SQL ToDictionary ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...