在单个视图中具有不同LINQ查询的多个表

时间:2014-11-18 05:50:02

标签: c# asp.net-mvc razor

标题说明了一切,现在我有一个从linq查询填充的表,我想添加更多具有不同linq查询的表。我有点失去了我该怎么做..

如果我为每个表创建不同的视图,我可能会这样做,但我希望只有一个视图。 :d

这是我的代码:(这是“正在进行”项目的表格)

控制器:

public ActionResult Index()
    { 

            var project = from x in db.Projects
                          where x.Project_Status == "Ongoing"
                          select x;

            return View(project);

    }

型号:

 public class Project
{
    [Key]
    public int Project_Id { get; set; }
    public string Project_Name { get; set; }
    public string Project_Detail { get; set; }
    public string Project_Status { get; set; }
    public int Employee_Id { get; set; }
}  

查看型号:

public class AdminHomeViewModel
{
    public Project Ongoing { get; set; } //table for ongoing projects
    public Project NYA { get; set; } //another table for Not Yet Assigned projects
    public Employee Free { get; set; } //another table for free employees
    public List<Project> OngoingList { get; set; }
    public List<Employee> NYAList { get; set; }
    public List<Employee> FreeList { get; set; }    
}

1 个答案:

答案 0 :(得分:0)

您会对不同类型的模型感到困惑。您应该在View-Model和Data-Model之间有一个清晰的理解。您应始终将View-Model返回到View,而不是Data-Model。数据模型只是代表数据框架的POCO类(在本例中是每个表)。每个表都应该有不同的数据模型,您必须已经基于实体框架方法(代码优先,模型优先或数据库优先)。然后,为您的视图准备一个模型(因为我们只能将一个模型绑定到一个视图)。保留该视图中所需的不同数据模型的所有字段并将其传递。请参阅以下方法:

数据的模型

 public class Project
{
    [Key]
    public int Project_Id { get; set; }
    public string Project_Name { get; set; }
    public string Project_Detail { get; set; }
    public string Project_Status { get; set; }
    public int Employee_Id { get; set; }
}

 public class Employee
{
    [Key]
    public int Employee_Id { get; set; }
    public string Employee_Name { get; set; }
    public string Employee_Detail { get; set; }   
}

查看-模型

public class MyViewModel
{
    public int Project_Id { get; set; }
    public string Project_Name { get; set; }
    public string Project_Detail { get; set; }
    public string Project_Status { get; set; }
    public int Employee_Id { get; set; }
    public string Employee_Name { get; set; }
    public string Employee_Detail { get; set; }   
}

public class MyViewModel
{
   public Project proj { get; set; }  
   public Employee emp { get; set; }  
}

将其传递给视图:

public ActionResult Index()
    { 

      MyViewModel model = new MyViewModel();

      // You linq query to populate model goes here

       return View(model);

    }

<强>更新

根据我的理解,你需要这样的东西:

查看 - 型号:

public class AdminHomeViewModel
{
    public AdminHomeViewModel()
    {
        Ongoing = new List<Project>();
        NYA = new List<Project>();
        Free = new List<Employee>();
    }

    public List<Project> Ongoing { get; set; } //table for ongoing projects
    public List<Project> NYA { get; set; } //another table for Not Yet Assigned projects
    public List<Employee> Free { get; set; } //another table for free employees
}

<强>控制器:

   public ActionResult Index()
    { 

    AdminHomeViewModel model = new AdminHomeViewModel();

      var result1 = (from x in db.Projects
                          where x.Project_Status == "Ongoing"
                          select new Project(){
                              Project_Id = x.Project_Id ,
                              Project_Name = x.Project_Name,
                              ... //all other assignments goes here
                          }).ToList();

var result2 = (from x in db.Projects
                          where x.Project_Status == "blah blah"
                          select new Project(){
                              Project_Id = x.Project_Id ,
                              Project_Name = x.Project_Name,
                              ... //all other assignments goes here
                          }).ToList();

var result3 = (from x in db.Employee
                          where x.AnyCondition == "blah blah"
                          select new Employee(){
                              Employee_Id = x.Employee_Id ,
                              Employee_Name = x.Employee_Name,
                              ... //all other assignments goes here
                          }).ToList();

    model.Ongoing = result1;
    model.NYA  = result2;
    model.Free = result3;


    return View(model);


    }