0

背景:我在视图模型中有一个带有 MultiSelectList 的 ASP.NET MVC 视图页面。我想用 MultiSelectList 对象中的 SelectedValues 列表填充标签。该列表以 IDName 类型存储在 MultiSelectList 中:

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 实际上是一个包含 string[] 的 IEnumerable。

4

2 回答 2

1

试试下面的。

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

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

于 2009-05-23T15:03:12.630 回答
0

您可以使用 LINQ过滤list.ids

list.Where(item => ids.Contains(item.Id.ToString())).Select(item => item.Name)
于 2009-05-23T15:05:04.030 回答