Reputation: 11725
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
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
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
Reputation: 674
Why not add a break in an else condition?
if (projectId.Value != selectedProjectId.Value)
{
...
}
else
{
break;
}
Upvotes: 2