0

我将 NFL 赛季时间表保存在 SQL Server 数据库中。一个Game表具有Week(指比赛发生的赛季中的一周 [1-17])、AwayTeamIDHomeTeamID等字段。AwayTeamIDHomeTeamID字段是引用Team表的外键。我想使用 LINQ 语句(在 ASP.NET MVC 3 应用程序中)按周返回游戏,包括Team表中的团队名称。我知道至少有一种方法可以做到这一点,但具体来说(我希望更优雅),我想返回一个每周与对应于该周的一系列游戏相关联的结果,而不是返回一个对象序列,new { Game, AwayTeam, HomeTeam }然后钻入Game获得一周的项目。我不确定我是否明确了我的目标……如果没有,请告诉我,我会尽力澄清。

我在101 LINQ Samplesinto上阅读了关于在语句中使用关键字的类似内容join,因此结果将是几周的序列,每个都与自己的游戏序列相关联。使用该站点的示例,我尝试了以下操作:

    string[] wks = { "1", "2", "3" };

    var model =
        from g in _db.NFLGames
        join a in _db.NFLTeams on g.AwayTeamID equals a.NFLTeamID
        join h in _db.NFLTeams on g.HomeTeamID equals h.NFLTeamID
        select new TestGameModel { Game = g, AwayTeam = a.Name, HomeTeam = h.Name };

    var weekgames = 
        from w in wks
        join gm in model on w equals gm.Game.NFLWeek into gw
        select new TestNflWeeklySchedule { Week = w, Games = gw };

    foreach (var wg in weekgames) {
        System.Diagnostics.Debug.WriteLine("NFL week: " + wg.Week + "     number of games this week: " + wg.Games.Count());
        foreach (var g in wg.Games) {
            System.Diagnostics.Debug.WriteLine("  " + g.AwayTeam + " at " + g.HomeTeam + " [" + g.Game.DateTimeStart + "]");
        }
    }

代码执行,但输出是

NFL week: 1     number of games this week: 0
NFL week: 2     number of games this week: 0
NFL week: 3     number of games this week: 0

显然,加入的第二个查询model与指定周发生的游戏不匹配。我也尝试过,而不是两个查询,只是一个 LINQ 语句,它基本上将第一个查询嵌套在第二个查询中。这给了我同样的结果。

谁能告诉我我的代码中有什么错误或为什么这不起作用?我是 LINQ 的新手,所以很有可能它很简单。

4

1 回答 1

0

这是你要找的吗?

var weekGames = _db.NFLGames.GroupBy(g => g.NFLWeek);

foreach (var wg in weekGames)
{
    Debug.WriteLine("Week: " + wg.Key + " Games: " + wg.Count());

    foreach (var g in wg) 
    {
        Debug.WriteLine(g.AwayTeam + " at " + g.HomeTeam + " [" + g.Game.DateTimeStart + "]");
    }
}
于 2012-07-13T19:30:04.237 回答