我将 NFL 赛季时间表保存在 SQL Server 数据库中。一个Game
表具有Week
(指比赛发生的赛季中的一周 [1-17])、AwayTeamID
和HomeTeamID
等字段。AwayTeamID
和HomeTeamID
字段是引用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 的新手,所以很有可能它很简单。