2011-02-03 177 views
1

如何LINQ查询的结果分配到字典...如何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; 

    } 
+0

虽然我不知道这些标签与这个问题有什么关系。 – 2011-02-03 03:33:52

+0

`.ToDictionary`? – RPM1984 2011-02-03 03:35:44

+0

@Yuriy - 我编辑了这些标签。它是definetely C#,他(我假设)试图从该集合/ LINQ查询中创建一个“字典”。这些标签不相关吗? – RPM1984 2011-02-03 03:36:54

回答

1

其实你的代码不说明你的愿望付诸字典什么。关键是什么?与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

好吧,让我们想象两个字典的内容:

  • 角色DIC = [{“aaa”,RolePrivilege1},{“bbb”,RolePrivilege2},{“ccc”,RolePrivilege3}]
  • 特权DIC = [{ “AAA”,Privilege5},{ “BBB”,Privilege6},{ “DDD”,Privilege7}]

你期望的输出? 我想你想获得下一sequense:

  • 结果= [{ “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

您可能正在寻找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); 

你的变量是令人困惑,因为employeeARolePrivilege型和employeeBPrivilege类型。此外,最好在ID上进行连接而不是名称(如果可能)。

也许这个问题会有所帮助:
Linq-to-SQL ToDictionary()