2013-10-04 120 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(如果你想項目y以新型X)或Cast(如果Y是從X繼承)的IEnumerable<T>擴展:

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

如果ContactPersonViewModel是聯繫人:聯繫

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

通常創建視圖模型涉及從實體到視圖模型的手動屬性映射。像這樣:

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

所以我也建議你看看Automapper這樣的映射框架。它爲你做了很多映射。而這種代碼如下:

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

非常感謝'Automapper'!問候 :) – whoah

1

當然,Enumerable.Select

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

這是假設有一個ContactPersonViewModel構造函數,一個ContactPerson;如果沒有,你將不得不提供另一種方式來初始化視圖模型。

0

做這將是Select方法的一種方式:

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>(); 
相關問題