将 IEnumerable<Dto> 转换为 IEnumerable<ViewModel>
Transform IEnumerable<Dto> to IEnumerable<ViewModel>
在我的操作中,我正在 return 一个 IEnumerable<Dto>
,但由于逻辑上的一些变化,我想 return 一个 IEnumerable<ViewModel>
。 Dto
和 ViewModel
之间的主要区别只是两个字段。
public IHttpActionResult GetRecursos(Guid LeccionId)
{
var result = _IProfesorRecurso.GetRecursoFromLeccion(LeccionId);
if (result == null) return BadRequest();
return result;
}
结果是 IEnumerable<Dto>
:
public class Dto
{
public Guid Id { get; set; }
/* here are some properties */
}
ViewModel
会是这样的:
public class viewmodel
{
public Guid Id { get; set; }
/* here are some properties, the same as in Dto */
public string ViewmodelProperty { get; set; }
}
假设 result
是你的 dto classes 的集合,你可以使用 LINQ 查询并使用 Select
方法生成你的视图模型的新列表 class
var newList = result.Select(x=>new MyViewModel { Id =x.Id,
Name=x.Name,
ExtraProperty = "New property on vm"});
这与使用 foreach
循环遍历结果集合并创建新的 MyViewModel 对象基本相同
var newList = new List<MyViewModel>();
foreach(var d in result)
{
var vm = new MyViewModel { Id=d.Id, Name =d.Name};
vm.SomeOtherProperty = d.SomeOtherProperty;
vm.ExtraProperty = "New property on vm";
newList.Add(vm);
}
在我的操作中,我正在 return 一个 IEnumerable<Dto>
,但由于逻辑上的一些变化,我想 return 一个 IEnumerable<ViewModel>
。 Dto
和 ViewModel
之间的主要区别只是两个字段。
public IHttpActionResult GetRecursos(Guid LeccionId)
{
var result = _IProfesorRecurso.GetRecursoFromLeccion(LeccionId);
if (result == null) return BadRequest();
return result;
}
结果是 IEnumerable<Dto>
:
public class Dto
{
public Guid Id { get; set; }
/* here are some properties */
}
ViewModel
会是这样的:
public class viewmodel
{
public Guid Id { get; set; }
/* here are some properties, the same as in Dto */
public string ViewmodelProperty { get; set; }
}
假设 result
是你的 dto classes 的集合,你可以使用 LINQ 查询并使用 Select
方法生成你的视图模型的新列表 class
var newList = result.Select(x=>new MyViewModel { Id =x.Id,
Name=x.Name,
ExtraProperty = "New property on vm"});
这与使用 foreach
循环遍历结果集合并创建新的 MyViewModel 对象基本相同
var newList = new List<MyViewModel>();
foreach(var d in result)
{
var vm = new MyViewModel { Id=d.Id, Name =d.Name};
vm.SomeOtherProperty = d.SomeOtherProperty;
vm.ExtraProperty = "New property on vm";
newList.Add(vm);
}