无法从多个表中获取数据以在视图中显示,主要是因为其中一个是关联表。
您好我有这3个表及其列
Theat ID 描述
控制 ID 数 描述
ThreatHasControl 威胁ID 控制ID
我正在尝试创建一个视图,该视图将显示与所选威胁相关联的所有控件
因为使用关联表我不知道如何获取我需要的数据。我想我需要以某种方式加入这些表格。
我目前在我的存储库中有这个方法来获取ThreatHasControl表中的每个Item,它匹配为所选威胁传递的id
public IQueryable<ThreatHasControl> ThreatHasControl(int ThreatID)
{
_context = new RiskAssessmentApplicationEntities();
IQueryable<ThreatHasControl> ThreatControl = _context.ThreatHasControl.Where(t => t.ThreatID == ThreatID);
return ThreatControl;
}
猜测它在这里我需要做点别的事。
我也有这个作为我的控制器
public ActionResult GetThreatControls(int ThreatID)
{
repository = new EFThreatRepository();
ViewModel MyModel = new ViewModel();
MyModel.ThreatHasControl = repository.ThreatHasControl(ThreatID);
List<ViewModel> ViewModelList = new List<ViewModel>();
ViewModelList.Add(MyModel);
return View(ViewModelList);
}
有人可以提供一些建议吗?提前谢谢
答案 0 :(得分:0)
http://www.codeproject.com/Articles/476967/WhatplusisplusViewData-2cplusViewBagplusandplusTem
它可以容纳任何物体......
你是否在你的观点中设定了:
@model System.Collections.Generic.List<ViewModel>
在页面顶部?并将其用作常规清单?
foreach(var ViewModel in Model)
{
....
}
答案 1 :(得分:0)
我应该为我的问题制定解决方案。
事实证明我只需要增强linq查询导航路径,以便选择并包含所需的表/数据
我暂时从存储库中删除了该方法,以便更容易理解
GetThreatControls操作方法
public ActionResult GetThreatControls(int ThreatID)
{
RiskAssessmentApplicationEntities _DBContext = new RiskAssessmentApplicationEntities();
ThreatHasControl ViewModel = new ThreatHasControl();
ViewModel.Threat = _DBContext.Threats.Single(x => x.ID == ThreatID);
ViewModel.Controls = _DBContext
.ThreatHasControl
.Include("ThreatHasControl.Control")
.Where(x => x.ThreatID == ThreatID)
.Select(x => x.Control);
return View(ViewModel);
}