learning
learning

Reputation: 11725

Simple stupid foreach loop question

In the code below i`m trying to read a list of selected projects and a list of all projects available.

I want to store the all the projects that have not been selected from the list of all projects. But with the code below, I`m having list of all projects...Where and how to break the second loop incase projectId.Value == selectedProjectId.Value ?

public IEnumerable NotselectedProjects; public IEnumerable NotSelectedProjects() {

        if (this.NotselectedProjects == null)
        {
            List<SelectListItem> result = new List<SelectListItem>();
            foreach (var selectedProjectId in selectedProjects) 
            {
                foreach (var projectId in projectLists)
                {
                    if (projectId.Value != selectedProjectId.Value)
                    {
                        result.Add(new SelectListItem
                        {
                            Selected = false,
                            Text = projectId.Text,
                            Value = projectId.Value
                        });
                        this.NotselectedProjects = result.AsEnumerable();
                    }
                }
            }
        }
        return this.NotselectedProjects;

    }

Upvotes: 2

Views: 3321

Answers (3)

Joop
Joop

Reputation: 2839

if(this.NotSelectedProjects == null) {
//build a dictionary for fast look-up
Dictionary<string, SelectListItem> selectedProjects = new Dictionary<string, SelectListItem>();
foreach(SelectListItem item in selectedProjectes){
    selectedProjects.Add(item.Value, SelectListItem);
}

//loop through all the projects
List<SelectItem> result = new List<SelectListItem>();
foreach(SelectListItem item in projectlist) {
    if(selectedProjects.HasKey(item.Value)){
        continue; //this project is selected
    }

    result.Add(item);
}

this.NotSelectedProjects = result;
}

return this.NotSelectedProjects;

Upvotes: 0

Jens
Jens

Reputation: 25563

You could use LINQ to shorten your loop to

var result = from projectId in projectLists
             where !selectedProjects.Any(s => s.Value == projectId.Value)
             select new SelectListItem  
                        {  
                            Selected = false,  
                            Text = projectId.Text,  
                            Value = projectId.Value  
                        });

Upvotes: 5

Michael
Michael

Reputation: 674

Why not add a break in an else condition?

if (projectId.Value != selectedProjectId.Value)
{
    ...
}
else 
{
    break;
}

Upvotes: 2

Related Questions