Asp.net 如何将这两个模型合并到viewmodel中

Asp.net 如何将这两个模型合并到viewmodel中,asp.net,asp.net-core,asp.net-core-mvc,Asp.net,Asp.net Core,Asp.net Core Mvc,这是我的第一个ASP项目,我正在努力研究如何将多个表连接到一个viewmodel中。我有一个名为project的模型,它将用于创建新项目并将它们插入数据库 using System; namespace vasttPM1.Models { public class Project { public int ID { get; set; } public string ProjectName { get; set; } public

这是我的第一个ASP项目,我正在努力研究如何将多个表连接到一个viewmodel中。我有一个名为project的模型,它将用于创建新项目并将它们插入数据库

using System;

namespace vasttPM1.Models
{
    public class Project
    {
        public int ID { get; set; }
        public string ProjectName { get; set; }
        public string CreatedBy { get; set; }
        public DateTime CreateDate { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime Enddate { get; set; }
        public string Installer { get; set; }
        public int ProjectNumber { get; set; }
        public string ProjectManager { get; set; }
        public string CustomerName { get; set; }
        public string CustomerPhone { get; set; }
        public string CustomerEmail { get; set; }
        public string ProjectType { get; set; }
        public string Building { get; set; }
        public string Rooms { get; set; }
        public string ProjectDescription { get; set; }
        public int Status { set; get; }
    }
}
我在数据库中有一个名为ProjectStatus的静态表,它有一些与每个项目相关联的字段。主要是字段状态和百分比

因此,我试图从上面的模型中获取信息,并从projectstatus表中获取状态,即百分比,其中
project.status=projectstatus.id

然后将结果合并到viewmodel中

这听起来很容易,但我真的很难做到这一点


有什么建议吗?

据我所知,您需要将两个表放在一个视图模型中。为此,需要创建一个具有所需属性的新视图模型类。例如:

public class ProjectViewModel
{
    public string ProjectName { get; set; }
    public string Status { set; get; }
    public int Percent { set; get; }
}
然后,可以使用Linq查询将两个表连接在一起,并将它们选择到新对象中,如下所示:

var results = (from p in db.Project
              join ps in db.ProjectStatus on p.Status equals ps.Id
              select new ProjectViewModel()
              {
                  ProjectName = p.ProjectName,
                  Status = ps.StatusName,
                  Percent = ps.PercentComplete
              }).ToList();

这将为您创建一个ProjectViewModels列表,然后您可以在视图中使用这些模型。我可能有一些您的财产或列名不正确。我不得不猜测它们可能在您的ProjectStatus表中是什么。

您是否首先使用EF核心代码?是的,我创建了上面的模型,然后生成了CRUD脚手架,创建了视图、控制器等。进行了迁移,创建了表,似乎一切都在创建新项目,查看索引页上的详细信息等,而不是以表格格式显示项目,我想显示项目并从静态“projectstatus”表格中获取状态和百分比字段。是否希望所有数据显示在一行中(项目、状态、百分比字段)?谢谢您回复我。有几个问题。在上面的代码中,这是在控制器中还是在viewmodel对象中?我在数据库上得到一个错误。声明名称“db”在当前上下文中不存在。有没有办法解决这个问题?db是对DataContext对象的引用。它可能在您的项目中被命名为不同的名称。
var results
这段代码将放在Get方法中的控制器中。您可以将ViewModel存储在您喜欢的任何位置。有些人创建一个单独的项目,或者您可以将其放在Models文件夹中。然后,无论当前项目模型引用到哪里,都需要将其更改为ProjectViewModel。这将发生在控制器和视图中。一个重要的注意事项是,您将无法使用开箱即用的脚手架代码进行更新,因为您无法将ViewModel放回数据库中。假设此页面允许更新,则需要获取Project和ProjectStatus对象,并使用ProjectViewModel中的数据对其进行更新。谢谢。我只计划使用viewmodel来显示项目的整体视图。我将使用不同的视图/控制器来创建新项目/编辑它们等等。太棒了!那么这应该对你有用。如果是,请务必将其标记为答案。