IEnumerable и строковый массив - найти совпадающие значения - PullRequest
0 голосов
/ 23 мая 2009

Фон: у меня есть страница просмотра ASP.NET MVC с MultiSelectList в модели представления. Я хочу заполнить метку списком SelectedValues ​​из этого объекта MultiSelectList. Список хранится в MultiSelectList с типом IDName:

public class IDName {
    public int ID {get; set;}
    public string Name {get; set;}
}

Итак, MultiSelectList.Items - это IEnumerable, содержащий список IDName. Я могу сделать foreach над этим списком и взять .Name, чтобы получить имя каждой записи. Но я хочу сделать это, только если идентификатор находится в 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, содержащим строку [].

Ответы [ 2 ]

1 голос
/ 23 мая 2009

Попробуйте следующее.

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

Для этого обрабатываются все элементы коллекции MultiSelectList.Items. Затем он преобразует их в строго типизированный экземпляр IDName. Предложение where фильтрует коллекцию только по тем элементам, в которых поле Name соответствует записи в массиве SelectedItems.

0 голосов
/ 23 мая 2009

Вы можете использовать LINQ для фильтрации list против ids.

list.Where(item => ids.Contains(item.Id.ToString())).Select(item => item.Name)
...