在我的MVC应用程序中,我想获取所有Tests
的{{1}},标题是Headings
的父级,而参数是Parameters
的父级,例如:
Drop Downs
-> Tests
-> List of Headings
-> List of Parameters
在我的控制器中,我试图获取列表中的列表:
List of Drop Downs
我希望它是强类型的,所以我试图制作一个这样的类:
var getAllReport = (
from tests in _db.tblPatientSelectedTests.ToList()
from heading in _db.tblHeadings.Where(x=>x.TestID == tests.TestId).ToList()
from par in _db.tblParameters.Where(x=>x.HeadingID == heading.HeadingID).ToList()
from drp in _db.DropDownValues.Where(x =>x.ParemeterID == par.ParameterId).ToList()
select new
{
Tests = tests,
Headings = heading,
Parameters = par,
DropDowns = drp
}
).ToList();
ViewBag.GetAllReports = getAllReport;
我想在我的linq中使用该类public class allparams
{
public List<tblPatientSelectedTest> Tests { get; set; }
public List<tblHeading> Headings { get; set; }
public List<tblParameter> Parameters { get; set; }
public List<DropDownValue> DropDowns { get; set; }
}
,以便获得强类型视图。
我想这样在我的视图中填充结果:
allparams
答案 0 :(得分:3)
我想您正在使用EF。
您的问题可以通过Linq的Include()
方法解决。
var getAllReport = _db.tblPatientSelectedTests
.Include("tblHeadings")
.Include("tblParameters")
.Include("DropDownValue")
.ToList();
Include()
允许您从数据库中获取相关实体,作为同一查询的一部分。可以查看here。
然后您可以按如下方式使用它:
@foreach(Tests test in ViewBag.GetAllReports)
{
//do some stuff
@foreach(Headings heading in test.tblHeadings)
{
//do some stuff and so on for other nested lists
//and so on... for tblParameters and DropDownValue
}
}
尽管只是建议,但出于可维护性的原因,数据访问逻辑应保留在单独的层中。