[英]Exporting IEnumerable<x> or IEnumerable<y> in same method
[英]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.