繁体   English   中英

将IEnumerable <X>转换为IEnumerable <Y>

[英]Converting IEnumerable<X> to IEnumerable<Y>

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

我怎样才能做到这一点? 我有IEnumerable<X>然后我想在IEnumerable<Y>转换它。

有没有办法做到这一点?

问候

使用Select (如果您希望项目Y为新类型X)或Cast (如果Y继承自X) IEnumerable<T>扩展名:

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

如果ContactPersonViewModel是ContactPerson:

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);

当然, Enumerable.Select

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

这假设有一个ContactPersonViewModel构造函数,它接受一个ContactPerson ; 如果没有,您将不得不提供另一种方法来初始化viewmodel。

试着施展它。

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

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

一种方法是Select方法:

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

这可能会有所帮助(您可以使用Select方法):

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

不要忘记添加using System.Linq;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM