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