2009-05-23 4 views
0

배경 : 뷰 모델에 MultiSelectList가있는 ASP.NET MVC보기 페이지가 있습니다. 해당 MultiSelectList 개체에서 SelectedValues ​​목록으로 레이블을 채 웁니다. 이 목록은 idName에는의 유형으로 MultiSelectList 내에 저장됩니다IEnumerable 및 문자열 배열 - 일치하는 값 찾기

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

그래서 MultiSelectList.Items이 idName에는의 목록을 포함하는 IEnumerable을합니다. 이 목록에 대해 foreach를 수행하고 .Name을 가져 와서 각 항목의 이름을 가져올 수 있습니다.

["1", "3", "4"] 

그래서, 난 그냥 때 IDName.Name idName에는을 얻으려면 다음 ID 문자열 []로 표시되고처럼 보이는, MultiSelectList.SelectedItems에있는 경우에, 나는 단지이 작업을 수행 할 수. ID가 SelectedItems 목록에 있습니다.

저는 MVC와 C# 모두에 대해 매우 익숙해서 그렇게 할 수있는 최선의 방법이 확실하지 않습니다. 어떤 제안?

업데이트 # 2 :

OK, 내가 밀도가되고 있었다. 작동 방식 :

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 절은 Name 필드가 SelectedItems 배열의 항목과 일치하는 항목에만 컬렉션을 필터링합니다.

+0

아주 가까이! 작업 솔루션에 대한 내 업데이트를 확인하십시오 (첫 번째 게시물에서 세부적인 내용이 잘못되어 주로 다릅니다). 고맙습니다! – user101306

0

ids에 대해 list을 필터링하기 위해 LINQ를 사용할 수 있습니다.

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