将 IEnumerable<Dto> 转换为 IEnumerable<ViewModel>

Transform IEnumerable<Dto> to IEnumerable<ViewModel>

在我的操作中,我正在 return 一个 IEnumerable<Dto>,但由于逻辑上的一些变化,我想 return 一个 IEnumerable<ViewModel>DtoViewModel 之间的主要区别只是两个字段。

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