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"); %>
<%}%>
データ ロード オプションを実行する理由は、ビューでの遅延読み込みを回避するためです。モデルに必要なすべてのデータをパックさせます。
あなたの質問を正しく理解できたと思います...