2011-02-03 86 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()

相關問題