На самом деле ваш код не иллюстрирует то, что вы хотите поместить в словарь.Что должно быть ключевым?Строка, связанная с 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);