1

背景的GroupBy与MVC脚手架

我目前工作的一个MVC项目,其中我期待显示薄膜以及它们将被编程播放时间的列表。为了实现这一目标,我对此有一个基本表(汇总):

+-------------+----------------+ 
| FilmID (int)| Time (datetime)| 
+-------------+----------------+ 
| 1   | 01:00   | 
| 1   | 03:00   | 
| 2   | 02:30   | 
+-------------+----------------+ 

此链接到“FilmStore”,其中基本上给出了与大纲/风格/等信息。

控制器

我已经设置了一个控制器,与所述自动生成的代码:

public ActionResult Index() 
{ 
    var filmShowings = db.FilmShowings.Include(f => f.FilmStore); 

    return View(filmShowings.ToList()); 
}    

查看

我已经改变了预设视图

@foreach (var item in Model) 
{ 
    <span>@Html.DisplayFor(modelItem => item.FilmID)</span> 

    <div class="time slot"> 
     @Html.DisplayFor(modelitem => item.Time).ToString().Substring(0, 5) 
    </div> 
} 

我想要什么

我期待在视图内通过filmID。因此,filmID将显示在一个范围内,并且每个具有该filmID的记录都将显示在一个div内。喜欢的东西:

1 
    01:00 
    03:00 
2 
    02:30 

我已经试过

我曾尝试到groupby子句添加到控制器:

.GroupBy(f => f.FilmID); 

,并改变了我的看法到:

@foreach (var item in Model) 
    { 
      <span>@Html.DisplayFor(modelItem => item.FilmID)</span> 
      @foreach(var group in groupItem.FilmID){ 
       <div class="time slot"> 
        @Html.DisplayFor(myitem => group.Time).ToString().Substring(0, 5) 
       </div> 
      } 
    } 

我推测一个嵌套for循环将允许我添加这个分组。但是,这不可避免地失败了。任何人都可以将我指向正确的方向吗?

回答

0

您可以通过两种方式做到这一点:

  1. 有你的强类型模型由电影ID,EX分组:你必须有2个属性,FilmID和列表,在你的控制器类,你会检索数据并通过FilmID进行分组,然后填充模型,然后将其传递给视图并按照与之相同的方式绘制,但不使用groupBy,您只需使用foreach迭代模型,然后在遍历列表的foreach中进行迭代的时代。
  2. 保持原样不加分组,并添加一个折叠/展开图标,点击图标,激发传递电影ID的Ajax请求,并将内容作为部分视图进行回放,并在电影ID以下的范围内绘制该内容,从性能角度看这个选项更好
0

GroupBy的返回值是IEnumerable<IGrouping<TKey, TSource>>。这意味着你最终会得到一个列表清单。IGrouping的实施本身将为IEnumerable,并增加一个Key属性,该属性将保存您分组的属性的值。

因此,对于您的示例,您需要遍历所有组,然后针对每个组遍历该组中的项目。

@foreach (var group in Model) 
{ 
    <span>@Html.DisplayFor(modelItem => group.Key)</span> 
    @foreach(var item in group){ 
     <div class="time slot"> 
      @Html.DisplayFor(myitem => item.Time).ToString().Substring(0, 5) 
     </div> 
    } 
} 
+0

'CS1579:foreach语句无法在类型“bwebsite.Content.Film”的变量操作,因为“bwebsite.Content.Film”不包含“GetEnumerator''一个公共定义 - 我错过了什么克里斯? (指第三行,“组”) – jbutler483