以下方法返回名为IEnumerable
的{{1}} MODEL
。
我想使用包含与PROF
相同字段的viewModel
,而不是使用模型。如何更改以下函数以返回Model PROF
(称为VIEWMODEL
)而不是MyProfViewModel
(称为model
)。
PROF
视图模型
public async Task<ActionResult> Index()
{
var cp= db.PROF.Include(c => c.ACCOUNTS);
return View(await cp.ToListAsync());
}
模型
public class MyProfViewModel
{
public int myprofID { get; set; }
public string myprofDes{ get; set; }
}
答案 0 :(得分:5)
乔尔的答案就是这样。但既然你提到你正在开始,我会提供一个更加三角形的答案,以便更清楚地说明如何使用。
首先你定义一个转换,在这种情况下我将它放在ViewModel中,但你可以把它放在其他更适合你项目的地方:
public class MyProfViewModel
{
public int myprofID { get; set; }
public string myprofDes { get; set; }
public static MyProfViewModel FromModel(PROF model)
{
var viewModel = new MyProfViewModel()
{
myprofID = model.ID,
myprofDes = model.DESCRIPTION
};
return viewModel;
}
}
然后您只需在返回前应用转换:
public async Task<ActionResult> Index()
{
var cp = PROF.Include(c => c.ACCOUNTS);
var models = await cp.ToListAsync();
var viewModels = models.Select(MyProfViewModel.FromModel);
return View(viewModels);
}
顺便说一句,你可以通过将它添加到ViewModel类来转换为模型:
public PROF ToModel()
{
return new PROF()
{
ID = this.myprofID,
DESCRIPTION = this.myprofDes
};
}
希望这有帮助!
答案 1 :(得分:3)
添加一个将一种类型映射到另一种类型的select语句:
db.PROF.Include(c => c.ACCOUNTS)
.Select(x=> new MyProfViewModel(){myprofID = x.ID, ...});
根据您的ORM层(实体框架?)是否支持此select语句,我会在.ListAsync();
之前的优点:可以带来更好的SQL查询优化。