2009-05-23 7 views
0

Contexte: J'ai une page de vue ASP.NET MVC avec une liste MultiSelectList dans le modèle View. Je veux remplir une étiquette avec la liste des SelectedValues ​​de cet objet MultiSelectList. La liste est stockée dans le MultiSelectList avec un type de idName:Tableau IEnumerable et chaîne de caractères - recherche de valeurs correspondantes

public class IDName { 
    public int ID {get; set;} 
    public string Name {get; set;} 
} 

Alors MultiSelectList.Items est un IEnumerable contenant une liste de idName de. Je peux faire un foreach sur cette liste et saisir .Name pour obtenir le nom de chaque entrée. Mais, je ne veux que faire si l'ID est MultiSelectList.SelectedItems, qui semble être une chaîne [] et ressemble à:

["1", "3", "4"] 

, je veux donc obtenir juste le IDName.Name quand idName. ID est dans la liste SelectedItems. Je suis assez nouveau à la fois MVC et C# donc je ne suis pas sûr de la meilleure façon de le faire. Aucune suggestion?

Mise à jour # 2:

OK, j'étais dense. Cela fonctionne:

list.Items 
    .Cast<IDName>() 
    .Where(x => list.SelectedValues.Cast<string>().Contains(x.ID.ToString())) 

SelectedValues ​​est en fait un IEnumerable contenant une chaîne [].

Répondre

1

Essayez les solutions suivantes.

var selected = MultiSelectList.Items 
    .Cast<IDName>() 
    .Where(x => MultiSelectList.SelectedItems.Contains(x.Name)); 

Cela permet de traiter tous les éléments de la collection MultiSelectList.Items. Il va ensuite les convertir tous en une instance IDName fortement typée. La clause where filtre la collection uniquement aux éléments dans lesquels le champ Name correspond à une entrée du tableau SelectedItems.

+0

Très proche! Consultez ma mise à jour pour la solution de travail (qui est principalement différente parce que j'ai eu un détail faux dans mon premier message). Je vous remercie! – user101306

0

Vous pouvez utiliser LINQ pour filtrer list par rapport à ids.

list.Where(item => ids.Contains(item.Id.ToString())).Select(item => item.Name) 
Questions connexes