2013-02-12 58 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(); 
相关问题