MVC4 Razor语法一对多嵌套列表

时间:2013-06-16 21:40:43

标签: linq asp.net-mvc-4 razor one-to-many

如果有人能指出我做错了什么,我会非常感激。我正在使用MVC 4,数据库首先使用edmx文件,两个简单的表试图在父结果下列出一组子结果。

控制器代码,简化:

 var query = db.Childtablemodel.Include(c => c.ParentTablemodel);
 return View(query.ToList());

视图,IEunumerable:

enter code here@{ 
foreach (var itm in Model)
{
 <div>

  @itm.ParentTable.DisplayName
  <ul>        
   <li>
    <span> @itm.City </span> <span> @itm.State</span>
   </li>

   </ul>

</div>
 }
}

结果重复每个孩子的父母姓名

公司1

Houston TX

公司1

德克萨斯州奥斯汀

我想要的是

公司1

Houston TX

德克萨斯州奥斯汀

我正在关注Contoso University tutorial,因此为我的控制器选择了子模型(在基于父模型的控制器中创建这些分组的令人沮丧的尝试之后)。 edmx模型确实显示了正确的导航属性,它们存在于生成的类文件中。但是,当我查看我的查询时,我发现它正在使用内部联接,这解释了我的结果 - 但完全让我感到困惑!

1 个答案:

答案 0 :(得分:3)

你将要使用linq的groupby来做到这一点。

@{ 
 foreach (var parent in Model.GroupBy(m => m.ParentTable.DisplayName))
 {
  <div>
   @parent.Key
   @foreach( var itm in parent )
   {
    <ul>        
     <li>
      <span> @itm.City </span> <span> @itm.State</span>
     </li>
    </ul>
   }
  </div>
 }
}