2013-10-04 3 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 является ContactPerson:

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

Обычно creat модель просмотра включает в себя сопоставление свойств вручную с объекта для просмотра модели. Как это:

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; если нет, вам придется указать другой способ инициализации viewmodel.

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>(); 
Смежные вопросы