将IEnumerable <dto>转换为IEnumerable <viewmodel>

时间:2017-10-23 20:17:14

标签: c# asp.net-mvc asp.net-mvc-4

在我的操作中,我将返回IEnumerable<Dto>,但由于逻辑中的某些更改,我想返回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; }
}

1 个答案:

答案 0 :(得分:1)

假设result是dto类的集合,您可以使用LINQ查询并使用Select方法生成视图模型类的新列表

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