背景:我在视图模型中有一个带有MultiSelectList的ASP.NET MVC视图页面。我想用MultiSelectList对象中的SelectedValues列表填充标签。该列表存储在MultiSelectList中,其类型为IDName:
public class IDName {
public int ID {get; set;}
public string Name {get; set;}
}
所以MultiSelectList.Items是一个包含IDName列表的IEnumerable。我可以在这个列表上做一个foreach并抓住.Name来获取每个条目的名称。但是,如果ID在MultiSelectList.SelectedItems中,我只想这样做,它看起来是一个字符串[],看起来像:
["1", "3", "4"]
所以,当IDName.ID在SelectedItems列表中时,我想获取IDName.Name。
我对MVC和C#都很陌生,所以我不确定最好的方法。有什么建议吗?
更新#2:
好吧,我很紧张。这有效:list.Items
.Cast<IDName>()
.Where(x => list.SelectedValues.Cast<string>().Contains(x.ID.ToString()))
SelectedValues实际上是一个包含字符串[]的IEnumerable。
答案 0 :(得分:1)
请尝试以下操作。
var selected = MultiSelectList.Items
.Cast<IDName>()
.Where(x => MultiSelectList.SelectedItems.Contains(x.Name));
这样做是为了处理MultiSelectList.Items集合中的所有项目。然后,它会将所有这些实例强制转换为强类型IDName实例。 where子句将集合过滤为Name字段与SelectedItems数组中的条目匹配的项目。
答案 1 :(得分:0)
您可以使用LINQ针对list
过滤ids
。
list.Where(item => ids.Contains(item.Id.ToString())).Select(item => item.Name)