嵌套的foreach在网页上循环

时间:2011-03-20 10:29:40

标签: c# asp.net-mvc-3

我从控制器中的SQL数据库表中选择以下数据

            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() );

并调用DisplayLeagues视图以显示它。从orderby可以看出,它包含多个团队。我想在每个团队的网页上显示一个单独的表格。我的页面声明包含

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

作为模型的声明。要显示表格的各行,我有

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

但是如何根据整个表格周围团队的名称添加循环控件?似乎无法编码

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

2 个答案:

答案 0 :(得分: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如果更容易,则会执行非常相似的操作。

答案 1 :(得分:0)

对于外部循环,它为每个团队生成一个单独的表,我使用了以下

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

对于为每个团队生成单独匹配的内部循环,我使用了

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

这非常有效。