2011-03-20 181 views
2

我從我的控制器嵌套的foreach在網頁上循環

   var fixtures = from f in _context.Fixtures 
         where f.MatchDate.Year == year && 
         (gender.Contains(f.Gender)) && 
         (type.Contains(f.MatchType)) && 
         (team.Contains(f.TeamName)) 
         orderby f.TeamName, f.MatchDate 
         select f; 

     return View("DisplayLeagues", fixtures.ToList()); 

中的SQL數據庫表中選擇以下數據,並調用DisplayLeagues視圖來顯示它。從orderby可以看出,它包含多個團隊。我想在每個團隊的網頁上顯示一個單獨的表格。我的頁面聲明包含

Inherits="System.Web.Mvc.ViewPage<IEnumerable<RLSBCWebSite.Domain.Entities.Fixture>>" 

作爲模型的聲明。要顯示錶格的各行,我有

<% foreach (var item in Model.AsEnumerable()) { %> 

但是如何根據整個表格周圍的團隊名稱添加循環控件?似乎不可能編碼

<% foreach (var team in Model.TeamName .... 
+0

我不確定Model.TeamName是什麼類型。我會假設它是一個字符串? 您需要將模型列表添加到您的模型中,然後遍歷此列表。 – MartinHN 2011-03-20 10:38:25

+0

@MartinMH:Model.TeamName確實是一個字符串。它包含一個團隊列表。這可以是單個團隊,也可以是'(team.Contains(f.TeamName))'定義的四個不同的團隊。然後由團隊訂購,因此:'orderby f.TeamName,f.MatchDate'。然後,我想在數據集中的每個團隊的視圖中顯示一個單獨的表格。 – xiecs 2011-03-21 11:00:32

回答

0

對於外環,其產生一個單獨的表中的每個隊,我使用了下列

<% foreach (var teamName in Model.AsEnumerable().GroupBy(r => r.TeamName)) { 

對於內環,其產生單獨的比賽每隊中,我使用

<% foreach (var item in Model.AsEnumerable().Where(item => item.TeamName == teamName.Key.ToString())) { 

這工作得很好。

0

喜歡的東西:

group g by f.TeamName into tmp 
select new {TeamName = f.Key, Fixtures = tmp.ToList() } 

這會給你每隊一組,即

foreach(var grp in query) { 
    Console.WriteLine(grp.TeamName); 
    foreach(var fixture in grp.Fixtures) { 
     // write fixture details 
    } 
} 

注意這改變每個項目的IGrouping<string, List<Fixture>>,並且請注意ToLookup如果更容易,會做類似的事情。

+0

感謝您的及時回覆。當我躺在牀上決定是否起牀時,今天早上我想出了類似的東西。 – xiecs 2011-03-21 09:00:04