2013-10-04 5 views
3
IEnumerable<ContactPerson> results = _contactPersonRepository.GetContactPersons().Where(x => x.UserId == user.UserId); 
IEnumerable<ContactPersonViewModel> contactPersons = results... 

어떻게하면됩니까? 나는 IEnumerable<X>을 가지고 있고, 그 다음 그것을 IEnumerable<Y>으로 바꾸고 싶습니다.IEnumerable <X>을 IEnumerable로 변환 <Y>

이렇게 할 방법이 있습니까?

감사

답변

4

사용 Select 또는 Cast (Y가 X에서 상속 된 경우) IEnumerable<T>의 확장 (당신은 프로젝트 Y 새로운 유형의 X에 원하는 경우) :

IEnumerable<ContactPersonViewModel> contactPersons = 
    results.Select(p => CreateContactPersonViewModelFrom(p)); 

ContactPersonViewModel이 ContactPerson 경우 :

IEnumerable<ContactPersonViewModel> contactPersons = 
    results.Cast<ContactPersonViewModel>(); 

일반적으로 creat 뷰 모델에는 엔티티에서 뷰 모델로 수동 특성 매핑이 포함됩니다. 이처럼 :

IEnumerable<ContactPersonViewModel> contactPersons = 
    results.Select(p => new ContactPersonViewModel { 
         Name = p.Name, 
         Phone = p.Phone 
        }); 

그래서 나는 또한 당신이 Automapper 같은 일부 매핑 프레임 워크를 살펴 가지고하는 것이 좋습니다. 그것은 당신을 위해 많은 매핑을 만듭니다. 이것은 ContactPerson 소요 ContactPersonViewModel 생성자 거기에 가정

var contactPersons = results.Select(r => new ContactPersonViewModel(r)); 

;

IEnumerable<ContactPersonViewModel> contactPersons = 
    Mapper.Map<IEnumerable<ContactPersonViewModel>>(results); 
+0

'Automapper'에 대한 큰 감사! 감사합니다 :) – whoah

1

물론, Enumerable.Select :처럼 그리고이 코드는 볼 것이다 그렇지 않은 경우 뷰 모델을 초기화하는 또 다른 방법을 제공해야합니다.

0

Select 방법이 될 것입니다 일을 한 가지 방법이 5 월 도움이

IEnumerable<ContactPersonViewModel> contactPersons = results.Select(x => new ContactPersonViewModel 
{ 
    Id = x.Id 
    //... 
}); 
0

가 (당신이 Select 방법을 사용할 수 있습니다) :

IEnumerable<ContactPersonViewModel> contactPersons = 
     results.Select(i=>new ContactPersonViewModel(){/*set your parameters */}); 

using System.Linq;

를 추가하는 것을 잊지 마세요
1

그것을 던지려고하십시오.

IEnumerable<ContactPerson> results = _contactPersonRepository.GetContactPersons().Where(x => x.UserId == user.UserId); 

IEnumerable<ContactPersonViewModel> contactPersons = results.Cast<ContactPersonViewModel>(); 
관련 문제