Linq-引用子表
我有一些关于“目标”应用程序的表格(屏幕抓图如下)。我正在使用MVC3、razor和linq 我正在使用一个模型goalsModel来检索我的数据: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
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);
}