如何在ASP.NET MVC中将Controller对象列表转换为Controller上的viewmodel

kur*_*asa 5 c# asp.net asp.net-mvc

我想知道将我检索到的域对象列表转换为控制器中的自定义ViewModel的最佳方法

例如

IList<Balls> _balls = _ballsService.GetBalls(searchCriteria);
Run Code Online (Sandbox Code Playgroud)

IList<BallViewModels> _balls = _ballsService.GetBalls(searchCriteria);
Run Code Online (Sandbox Code Playgroud)

它不必像我上面概述的那样,即它不必是IList,如果不是直接访问服务,而是通过一些其他层将对象转换为viewmodels,那也没关系.

谢谢

Mat*_*ton 7

对于简单的对象,您可以使用Linq:

IList<BallViewModel> _balls = _ballsService.GetBalls(searchCriteria)
    .Select(b => new BallsViewModel
                 {
                     ID = b.ID,
                     Name = b.Name,
                     // etc
                 })
    .ToList();
Run Code Online (Sandbox Code Playgroud)

但是,这可能会非常重复,因此您可能希望为BallViewModel类提供一个接受Ball的构造函数,并为您完成工作.

另一种方法是使用类似AutoMapper的库将属性(甚至是嵌套的属性)从域对象复制到视图模型.