0

NFL のシーズン スケジュールを SQL Server DB に保存しています。Gameテーブルには、Week(ゲームが行われるシーズンの週 [1-17] を参照)、AwayTeamID、 などのフィールドがHomeTeamIDあります。およびフィールドはAwayTeamID、テーブルHomeTeamIDを参照する外部キーです。TeamLINQ ステートメント (ASP.NET MVC 3 アプリ内) を使用して、テーブルのチーム名を含め、週ごとにゲームを返したいと考えていTeamます。私はこれを行う方法を少なくとも1つ知っていますが、具体的には(そしてもっとエレガントに望んでいます)、その週に対応する一連のゲームに関連付けられた毎週の結果を返したいと思います。オブジェクトのシーケンス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

どうやら、 に参加する 2 番目のクエリmodelは、指定された週に発生するゲームと一致しません。また、2 つのクエリの代わりに、最初のクエリを 2 番目のクエリ内に本質的にネストする 1 つの 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 に答える