C# IEnumerable和字符串数组-查找匹配值
背景:我有一个ASP.NET MVC视图页面,视图模型中有一个MultiSelectList。我想用MultiSelectList对象中的SelectedValue列表填充标签。该列表以IDName类型存储在MultiSelect列表中:C# IEnumerable和字符串数组-查找匹配值,c#,asp.net-mvc,viewmodel,ienumerable,C#,Asp.net Mvc,Viewmodel,Ienumerable,背景:我有一个ASP.NET MVC视图页面,视图模型中有一个MultiSelectList。我想用MultiSelectList对象中的SelectedValue列表填充标签。该列表以IDName类型存储在MultiSelect列表中: public class IDName { public int ID {get; set;} public string Name {get; set;} } 所以MultiSelectList.Items是一个IEnumerable,包含
public class IDName {
public int ID {get; set;}
public string Name {get; set;}
}
所以MultiSelectList.Items是一个IEnumerable,包含一个IDName的列表。我可以在这个列表上做一个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()))
list.Items
.Cast()
.Where(x=>list.SelectedValues.Cast().Contains(x.ID.ToString())
SelectedValues实际上是一个包含字符串[]的IEnumerable。请尝试以下操作
var selected = MultiSelectList.Items
.Cast<IDName>()
.Where(x => MultiSelectList.SelectedItems.Contains(x.Name));
var selected=MultiSelectList.Items
.Cast()
。其中(x=>MultiSelectList.SelectedItems.Contains(x.Name));
这将处理MultiSelectList.items集合中的所有项。然后,它将把它们全部强制转换为强类型IDName实例。where子句将仅将集合筛选到名称字段与SelectedItems数组中的条目匹配的项目。您可以使用LINQ根据
ID
筛选列表
list.Where(item => ids.Contains(item.Id.ToString())).Select(item => item.Name)
非常接近!查看我的工作解决方案更新(这主要是不同的,因为我在我的第一篇文章中得到了一个细节错误)。非常感谢。