2013-02-12 56 views
0

我有角色的列表爲用戶分配:分割字符串,並使用每個項目分配到另一個列表

var role1 = new Role { ApplicationName = "XXX", RoleName = "ROLE1" }; 
var role2 = new Role { ApplicationName = "XXX", RoleName = "ROLE2" }; 
var role3 = new Role { ApplicationName = "XXX", RoleName = "ROLE3" }; 

List<Role> listRoles = new List<Role> 
{ 
    role1, 
    role2, 
    role3 
}; 

我可以分配這樣一個特定的角色:

var userRoles = new List<Role> 
{ 
    listRoles.First(x => x.RoleName == "ROLE1") 
} 

讓我們說我有一個字符串與列出角色添加到我的用戶

string listRoles = "ROLE1;ROLE3"; 

我的問題:我如何分配一個角色列表給我的用戶?

我嘗試:

var userRoles = new List<Role> 
{ 
    foreach(var role in listRoles.Split(";") 
    { 
     listRoles.First(x => x.RoleName == role); 
    } 
} 

我得到了編譯錯誤。

+2

那是什麼編譯錯誤? – 2013-02-12 10:10:50

回答

0

您試圖在collection initializer內部使用foreach循環,您不能這樣做。相反,您可以執行以下操作:

var userRoles = new List<Roles>(); 

foreach(var role in listRoles.Split(";")) 
{ 
    userRoles.Add(listRoles.First(x => x.RoleName == role)) 
} 
+0

謝謝。這解決了我的問題。 – Bronzato 2013-02-12 10:42:09

1

您有編譯錯誤,因爲您爲原始角色的字符串和列表使用了相同的變量名listRoles

var rolesToAssign = "ROLE1;ROLE3"; 
var matchingRoles = rolesToAssign.Split(';'); 

var userRoles = listRoles.Where(x => matchingRoles.Contains(x.RoleName)) 
         .ToList(); 
相關問題