Bronzato
Bronzato

Reputation: 9342

split a string and use each item to assign to another list

I have a list of roles to assign to users:

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
};

I can assign a specific role like this:

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

Let's say I have a string with listed roles to add to my user

string listRoles = "ROLE1;ROLE3";

My question: how can I assign a list of roles to my user?

I try:

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

I got compile error.

Upvotes: 0

Views: 97

Answers (2)

Habib
Habib

Reputation: 223292

You are trying to use foreach loop inside the collection initializer, you can't do that. Instead you can do the following:

var userRoles = new List<Roles>();

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

Upvotes: 0

the_joric
the_joric

Reputation: 12241

You have compilation error because you use the same variable name listRoles for both string and list of origina roles.

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

var userRoles = listRoles.Where(x => matchingRoles.Contains(x.RoleName))
                         .ToList();

Upvotes: 1

Related Questions