2009-05-23 41 views
0

背景:我有一个ASP.NET MVC视图页面,在View Model中有一个MultiSelectList。我想用该MultiSelectList对象中的SelectedValues列表填充标签。该列表存储在MultiSelectList内用型IDName的:IEnumerable和字符串数组 - 找到匹配值

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.Name IDName。 ID在SelectedItems列表中。

我对MVC和C#都很新颖,所以我不确定最好的方式来做到这一点。有什么建议么?

更新#2:

好的,我正在密集。这工作:

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

SelectedValues实际上是一个包含字符串[]的IEnumerable。

回答

1

请尝试以下操作。

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

这是做什么处理MultiSelectList.Items集合中的所有项目。然后将它们全部转换为强类型的IDName实例。 where子句会将集合过滤为只有名称字段与SelectedItems数组中的条目匹配的项目。

+0

非常接近!看看我的更新的工作解决方案(这主要是不同的,因为我的第一篇文章中有一个细节错误)。谢谢! – user101306 2009-05-26 00:30:16

0

您可以使用LINQ过滤listids

list.Where(item => ids.Contains(item.Id.ToString())).Select(item => item.Name) 
相关问题