如何将这两个模型连接到一个视图模型中

spa*_*bot 2 asp.net asp.net-core-mvc asp.net-core

这是我的第一个 ASP 项目,我真的很纠结如何将多个表连接到一个视图模型中。我有一个名为 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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在数据库中有一个名为 ProjectStatus 的静态表,其中有一些与每个项目相关联的字段。主要是状态和百分比字段。

所以我想要做的是获取上面模型中的信息,并从 projectstatus 表中获取状态百分比,其中project.status = projectstatus.id.

然后将结果组合成一个视图模型。

这听起来很简单,但我真的很想知道如何完成这项工作。

有什么建议?

amr*_*nea 6

根据我的理解,您想将两张表放入一个视图模型中。为此,您需要使用所需的属性创建一个新的视图模型类。例如:

public class ProjectViewModel
{
    public string ProjectName { get; set; }
    public string Status { set; get; }
    public int Percent { set; get; }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用 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();
Run Code Online (Sandbox Code Playgroud)

这应该为您创建一个 ProjectViewModels 列表,然后您可以在您的视图中使用它。我的某些属性或列名称可能不正确。我不得不猜测它们在您的 ProjectStatus 表中可能是什么。