Linq查询以获取对象列表,并为每个对象获取另一个嵌套列表

时间:2018-07-10 23:03:00

标签: c# linq model-view-controller

在我的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

1 个答案:

答案 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
    }
}

尽管只是建议,但出于可维护性的原因,数据访问逻辑应保留在单独的层中。