2010-03-30 5 views
2

Dans le code ci-dessous i`m essayant de lire une liste des projets sélectionnés et une liste de tous les projets disponibles.simple question foreach stupide

Je veux stocker les tous les projets qui ne sont pas sélectionnés dans la liste de tous les projets. Mais avec le code ci-dessous, je m `avoir la liste de tous les projets ... Où et comment briser la deuxième boucle Incase projectId.Value == selectedProjectId.Value?

NotselectedProjects IEnumerable publics; IEnumerable publics 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; 

    } 

Répondre

5

Vous pouvez utiliser LINQ pour raccourcir la boucle à

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

Pourquoi ne pas ajouter une pause dans une condition d'autre?

if (projectId.Value != selectedProjectId.Value) 
{ 
    ... 
} 
else 
{ 
    break; 
} 
0
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;