IEnumerable和字符串数组 - 查找匹配值

时间:2009-05-23 14:59:01

标签: c# asp.net-mvc viewmodel ienumerable

背景:我在视图模型中有一个带有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。

2 个答案:

答案 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)