假设您的 Linq2Sql 实现与数据库具有相同的关系(如果您确实拖放到设计器,他们肯定会这样做),这就是我将如何处理它。
我将创建一个代理类型的强类型部分视图,它代表每个部分(代理,在你的情况下),称之为 AgencyReportSection.ascx。这种控制将使代理机构迭代其业务部门,进而迭代其客户。
无论您在哪里打包数据,都可以执行以下操作:
DataContext context = new DataContext();
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Agency>(a => a.BusinessUnit);
options.LoadWith<BusinessUnit>(b => b.Client);
context.LoadOptions = options;
这将为您提供的是,当上下文获得代理时,它将遵循定义的关系并为您提供这些对象。所以你得到:
Agency a = context.Agency.FirstOrDefault();
IEnumerable<BusinessUnit> units = a.BusinessUnits;
IEnumerable<Client> clients = units.Clients;
您的视图可以执行以下操作:
<% foreach(var agency in agencies)%{>
<% Html.RenderPartial("AgencyReportSection"); %>
<%}%>
您执行数据加载选项的原因是为了避免视图中的延迟加载,让模型打包所有必要的数据。
我希望我已经正确理解了你的问题......