Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在MVC模型中操作多个对象_Asp.net Mvc_Linq_Entity Framework 5 - Fatal编程技术网

Asp.net mvc 在MVC模型中操作多个对象

Asp.net mvc 在MVC模型中操作多个对象,asp.net-mvc,linq,entity-framework-5,Asp.net Mvc,Linq,Entity Framework 5,我有一个模型,其中包含六个类(由EF生成),我执行查询以将数据从数据库中获取到这些对象中。我需要在一个超类中包含多个类,因为我需要在一个视图中包含多个模型,顺便说一句,这很好。为了简洁起见,我消除了对其他类的许多查询 然而,我遇到的问题是,一旦数据进入控制器,如何根据一些业务逻辑进一步过滤数据?我不介意在中间层做,如果这是最好的 有两件事给我带来了麻烦 1)TimeTrackings类是项目的子对象,由于设计时编译错误(如果我将.Select添加到现有的中间层查询中,则无法过滤中间层上的任何内容

我有一个模型,其中包含六个类(由EF生成),我执行查询以将数据从数据库中获取到这些对象中。我需要在一个超类中包含多个类,因为我需要在一个视图中包含多个模型,顺便说一句,这很好。为了简洁起见,我消除了对其他类的许多查询

然而,我遇到的问题是,一旦数据进入控制器,如何根据一些业务逻辑进一步过滤数据?我不介意在中间层做,如果这是最好的

有两件事给我带来了麻烦

1)TimeTrackings类是项目的子对象,由于设计时编译错误(如果我将.Select添加到现有的中间层查询中,则无法过滤中间层上的任何内容)

2) 回到控制器后,如果我想进一步对结果集执行一些LINQ2Objects查询(从DB返回,通常带有一个“var”变量。在WebForms中,我可以将该“var”变量绑定到网格。在MVC中,我需要能够将进一步过滤的数据放回“IEnumerable项目”中变量,以便能够将其传递到视图中

我如何才能完成这两件事?我真的非常感谢在这方面的一些帮助,这将使我进一步澄清如何继续这个场景

下面是我的代码:

生成的EF类:

namespace YeagerTechModel
{
    using System;
    using System.Collections.Generic;

    public partial class Project
    {
        public Project()
        {
            this.TimeTrackings = new HashSet<TimeTracking>();
        }

         public short ProjectID { get; set; }
         public string Description { get; set; }
         public short CustomerID { get; set; }
         public string Name { get; set; }
         public short CategoryID { get; set; }
         public short PriorityID { get; set; }
         public short StatusID { get; set; }
         public Nullable<decimal> Quote { get; set; }
         public string Notes { get; set; }
         public System.DateTime CreatedDate { get; set; }
         public Nullable<System.DateTime> UpdatedDate { get; set; }

         public virtual Category Category { get; set; }
         public virtual Customer Customer { get; set; }
         public virtual Priority Priority { get; set; }
         public virtual Status Status { get; set; }
         public virtual ICollection<TimeTracking> TimeTrackings { get; set; }
    }
} 
中间层方法(为简洁起见,排除了Try/Catch):

public IQueryable GetProjects()
{
使用(YeagerTechEntities DbContext=new YeagerTechEntities())
{
DbContext.Configuration.ProxyCreationEnabled=false;
DbContext.Database.Connection.Open();
IQueryable proj=DbContext.Projects.Include(“时间跟踪”)。其中(w=>w.Notes!=null&&w.Status.Description!=null);
}
}
控制器:

public ActionResult Index()
        {
            // Do all the LINQ2SQL query logic on the middle tier to get all the items in your collection.
            IEnumerable<Project> projects = db.GetProjects();

            // If we need to do more additional logic, we can do a LINQ2Objects query. 
            var tt = projects.Select(s=> s.TimeTrackings.Where(w=> w.Notes != null));

            IEnumerable<Status> statuses = db.GetStatuses();

            return View("ProjectStatus");
        }
public ActionResult Index()
{
//在中间层执行所有LINQ2SQL查询逻辑,以获取集合中的所有项。
IEnumerable projects=db.GetProjects();
//如果需要执行更多的附加逻辑,可以执行LINQ2对象查询。
var tt=projects.Select(s=>s.TimeTrackings.Where(w=>w.Notes!=null));
IEnumerable statuses=db.GetStatuses();
返回视图(“项目状态”);
}
看法

@model YeagerTechModel.ViewModels.ProjectStatus
@{
ViewBag.Title=“项目状态”;
}
项目状态
@使用(Html.BeginForm(“UpdateProjectStatus”、“ProjectStatus”、新的AjaxOptions{HttpMethod=“POST”}))
{
@EditorFor(x=>x.project.Customer)
@EditorFor(x=>x.status.Description)
}

不清楚你的问题是什么。你有编译错误吗?在哪里?阅读文章中的要点1和2。这清楚地解释了我要做的。我显然不会问你的要点是否清楚。而且,没有人回答你的问题的原因可能是因为你的问题不够清楚。var tt变量过滤器s进一步介绍控制器中的项目变量。但是,似乎无法在进入视图的项目变量中包含进一步过滤的数据(tt变量)。我该怎么做?我也无法将中间层对象中的“tt”查询附加到“proj”上变量。我也不知道为什么。我很感激如何完成这两项任务。下面的代码应该实现什么?
var tt=projects.Select(s=>s.TimeTrackings.Where(w=>w.Notes!=null));
告诉我您希望查询返回什么数据,我会告诉您如何执行。
public IQueryable<Project> GetProjects()
        {
                using (YeagerTechEntities DbContext = new YeagerTechEntities())
                {
                    DbContext.Configuration.ProxyCreationEnabled = false;
                    DbContext.Database.Connection.Open();

                    IQueryable<Project> proj = DbContext.Projects.Include("TimeTrackings").Where(w => w.Notes != null && w.Status.Description != null);
                }
        }
public ActionResult Index()
        {
            // Do all the LINQ2SQL query logic on the middle tier to get all the items in your collection.
            IEnumerable<Project> projects = db.GetProjects();

            // If we need to do more additional logic, we can do a LINQ2Objects query. 
            var tt = projects.Select(s=> s.TimeTrackings.Where(w=> w.Notes != null));

            IEnumerable<Status> statuses = db.GetStatuses();

            return View("ProjectStatus");
        }
@model YeagerTechModel.ViewModels.ProjectStatus

@{
    ViewBag.Title = "ProjectStatus";
}

<h2>ProjectStatus</h2>

@using (Html.BeginForm("UpdateProjectStatus", "ProjectStatus", new AjaxOptions { HttpMethod = "POST" }))
{
    @Html.EditorFor(x => x.project.Customer)
    @Html.EditorFor(x => x.status.Description)

    <input type="submit" value='Submit' />
}