Linq-引用子表

Linq-引用子表,linq,asp.net-mvc-3,razor,Linq,Asp.net Mvc 3,Razor,我有一些关于“目标”应用程序的表格(屏幕抓图如下)。我正在使用MVC3、razor和linq 我正在使用一个模型goalsModel来检索我的数据: public goals-GetGoal(int-id) { 返回qDB.goals.Single(g=>g.goalID==id); } 我也希望有活动可以参加。。。在那里我可以做一些事情,比如: public goals GetGoalActivities(int-id) { 返回qDB.ilpActivities.Where(g=>g.go

我有一些关于“目标”应用程序的表格(屏幕抓图如下)。我正在使用MVC3、razor和linq

我正在使用一个模型goalsModel来检索我的数据:

public goals-GetGoal(int-id)
{
返回qDB.goals.Single(g=>g.goalID==id);
}

我也希望有活动可以参加。。。在那里我可以做一些事情,比如:

public goals GetGoalActivities(int-id)
{
返回qDB.ilpActivities.Where(g=>g.goalID==id);
}

但是,这将返回一个错误。的智能标记不显示任何可用于ilpActivities的列。我见过几种在控制器中编写linq查询代码的方法,但为了保持一致性,如果可能的话,我真的希望使用上面的格式

这里有一个链接,我一直试图遵循它,它可以做我想做的事情。但请记住,我最终将编辑现有活动、创建新活动和删除活动。链接:

[编辑] 我无法以新用户的身份发布图像。我的表格包括goalID作为目标的主键和ilpActivities中的外键。ilpActivities的主键为activityID

[更新]

我的表格如下所示(简化为包含相关字段): 进球:守门人,守门人姓名,守门人姓名 ilpActivities:activityID、goalID、activityName

我有一个dbml文件:employeeDataClasses.dbml,它是在设计模式下拖动表后为我生成的。它承认ilpActivities是目标的产物

我有一个goalsModel.cs文件:

namespace ILP.Models
{
public class goalsModel
{
    #region services
    public interface IGoalsService
    {
        List<goals> GetAllGoals(string oprID);
        bool CreateGoal(goals poll);
        List<ilpGoalStatus> GetStatuses();
        goals GetGoal(int id);
        bool EditGoal(goals poll);
        List<ilpActivity> GetGoalActivities(goals goal);
    }

    public class AssetService : IGoalsService
    {
        private goalsDataClassesDataContext qDB;

        public AssetService()
        {
            qDB = new goalsDataClassesDataContext();
        }

        #region IGoalsService Members
            public List<ilpActivity> GetGoalActivities (goals goal) 
        {
            IEnumerable<ilpActivity> activities = from g in qDB.goals
                         join a in qDB.ilpActivities on g.goalID equals a.goalID
                         where a.goalID == goal.goalID
                         select a;

            return activities.ToList();
        } 
在我的create activity partialview中,我只能访问目标模型:

@model ILP.Models.goals

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")"     type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>Create an Activity</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.goalName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.goalName)
        @Html.ValidationMessageFor(model => model.goalName)
    </div>
.... etc....
@model ILP.Models.goals
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
创建一个活动
@LabelFor(model=>model.goalName)
@EditorFor(model=>model.goalName)
@Html.ValidationMessageFor(model=>model.goalName)
等
在我看来,我需要访问ilpActivities的activityName,但唯一的选项来自目标表。

您可以更改:

public goals GetGoalActivities(int id) { return qDB.ilpActivities.Where(g => g.goalID == id); }
致:

public IEnumerable GetGoalActivities(int-id){return qDB.ilpActivities.Where(g=>g.goalID==id);}

因为
qDB.ilpActivities.Where(g=>g.goalID==id);
返回活动的IEnumerable,而不是像前面的方法那样返回单个目标。

我不确定我发布的方法是否为Linq,但我一直使用实体框架作为数据连接

首先,在您的数据模型中,您应该在两个表之间创建一个关联,当您创建了关联后,现在可以轻松地包含来自两个表的数据

// Include Activities 
public IEnumerable<Goal> GetGoalActivities (int GoalId) {
    qDB.Goal.Include("Activities").Where(w => w.goal_id == GoalId);
}
//包含活动
公共IEnumerable GetGoalActivity(内部GoalId){
qDB.目标。包括(“活动”)。其中(w=>w.Goal\u id==GoalId);
}

错误是什么..它爆炸是因为DataContext在尝试枚举时已死亡吗?否-它没有“看到”我的子表(ilpActivities)的内容。因此,当我尝试添加表单字段时:@Html.Editorfor(a=>a.ILPACtivitivities.activityName)--“activityName”智能标记中没有显示您的最终问题似乎与视图有关。若要将子表及其属性传递给视图,您需要向视图传递一个在其结构中包含子表的模型。请发布有关表结构以及所需模型结构的详细信息t传递到视图,以及一些关于视图的更详细的代码。如果我们可以看到关于您想要完成什么以及您从中工作的详细信息,那么建议如何填充您的模型就容易多了。是的-我尝试过了-不幸的是,我无法发布图像。我将尝试在查看更多信息时编辑我的文章为此,我似乎需要(以某种方式)将我的子表包含在我的datacontext中;将允许我访问qDB.ilpActivities,但不允许访问任何列,如qDB.ilpActivities.activityName;这是否需要另一个模型?我曾考虑过一个活动模型,但这使得将ilpActivities表放入目标模型中的功能似乎毫无意义。将上述内容放入我的goalsModel中会引发以下问题:错误1类型或na找不到mespace名称“ilpActivities”(是否缺少using指令或程序集引用?)它们与datacontext抱歉-那么我遗漏了一些东西。我的datacontext是为我生成的。这是我的第一个MVC项目,所以很可能我遗漏了一些明显的东西。在我的dbml文件中,名称仍然是ilpActivities..但是我得到了这个错误(在我之前的评论中)当我尝试引用它时。查看我的dbml时,我发现ilpActivity实际上是ilpActivity。进行上述更改似乎可行。但是,在我看来,我仍然只有来自目标的字段可用。我如何在我的控制器中调用它以将活动拉入我的模型?这看起来像我的格式-我假设是linq??-un幸运的是,在这种情况下,“include”抛出了一个错误(我将目标更改为目标):错误1“System.Data.Linq.Table”不包含“include”的定义,并且找不到扩展方法“include”接受类型为“System.Data.Linq.Table”的第一个参数(是否缺少using指令或程序集引用?)您是否在实体框架模型中设置了关联和导航?如果您希望能够包含实体,我认为您需要设置一个或两个实体。然后您可以在包含中使用模型名称或导航属性名称。您能详细说明一下吗?我需要在何处使用“.include”?抱歉-我是新手
public IEnumerable<ilpActivities> GetGoalActivities(int id) { return qDB.ilpActivities.Where(g => g.goalID == id); }
// Include Activities 
public IEnumerable<Goal> GetGoalActivities (int GoalId) {
    qDB.Goal.Include("Activities").Where(w => w.goal_id == GoalId);
}