返回ViewModel而不是Model

Ill*_*lep 3 c# linq viewmodel

以下方法返回一个IEnumerable MODEL被调用的PROF.

而不是使用模型,我想使用viewModel包含相同字段的a Model PROF.如何更改以下函数以返回my VIEWMODEL(被调用MyProfViewModel)而不是model(被调用PROF).

public async Task<ActionResult> Index()
{
    var cp= db.PROF.Include(c => c.ACCOUNTS);

    return View(await cp.ToListAsync());
}
Run Code Online (Sandbox Code Playgroud)

视图模型

public class MyProfViewModel
    {


        public int myprofID { get; set; }

        public string myprofDes{ get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

模型

public class PROF
    {


        public int ID{ get; set; }

        public string DESCRIPTION { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

小智 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你只需在返回之前应用转换:

    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);
    }
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您可以通过将其添加到ViewModel类来转换为模型:

    public PROF ToModel()
    {
        return new PROF()
        {
            ID = this.myprofID,
            DESCRIPTION = this.myprofDes
        };
    }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!