IEnumerable<ContactPerson> results = _contactPersonRepository.GetContactPersons().Where(x => x.UserId == user.UserId);
IEnumerable<ContactPersonViewModel> contactPersons = results...
我该怎么做?我有IEnumerable<X>
,然后我想在IEnumerable<Y>
转换它。
有没有办法做到这一点?
此致
答案 0 :(得分: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>();
通常创建视图模型涉及从实体到视图模型的手动属性映射。像这样:
IEnumerable<ContactPersonViewModel> contactPersons =
results.Select(p => new ContactPersonViewModel {
Name = p.Name,
Phone = p.Phone
});
所以我建议你看一下像Automapper这样的映射框架。它为你做了很多映射。这段代码看起来像:
IEnumerable<ContactPersonViewModel> contactPersons =
Mapper.Map<IEnumerable<ContactPersonViewModel>>(results);
答案 1 :(得分:1)
当然,Enumerable.Select
:
var contactPersons = results.Select(r => new ContactPersonViewModel(r));
这假设有一个ContactPersonViewModel
构造函数需要ContactPerson
;如果没有,您将不得不提供另一种初始化视图模型的方法。
答案 2 :(得分:1)
尝试施放它。
IEnumerable<ContactPerson> results = _contactPersonRepository.GetContactPersons().Where(x => x.UserId == user.UserId);
IEnumerable<ContactPersonViewModel> contactPersons = results.Cast<ContactPersonViewModel>();
答案 3 :(得分:0)
这样做的一种方法是Select
方法:
IEnumerable<ContactPersonViewModel> contactPersons = results.Select(x => new ContactPersonViewModel
{
Id = x.Id
//...
});
答案 4 :(得分:0)
这可能会有所帮助(您可以使用Select
方法):
IEnumerable<ContactPersonViewModel> contactPersons =
results.Select(i=>new ContactPersonViewModel(){/*set your parameters */});
不要忘记添加using System.Linq;