あなたは指定しなかったPlayer
クラス/テーブルを持っているとします(PlayerId
を見て)。
は、すべてのプレイヤーを取得することにより開始するのをしてみましょう:
IEnumerable<Player> players = _db.Players;
我々はViewModel
に各プレイヤーをマッピングする必要があるので、我々はSelect使用しようとしている。
IEnumerable<ViewModel> models = players.Select(p => new ViewModel());
をしかし、これらのViewModel
インスタンスがちょうどあります空の場合は、適切なデータを入力する必要があります。最も簡単なものを指定して、プレーヤーの名前を指定します:
IEnumerable<ViewModel> models = players.Select(p => new ViewModel()
{
PlayerName = p.PlayerName
});
次に、プレーヤーが参加したすべてのチームを取得する必要があります。このため、PlayersInGame
テーブルにクエリを行い、Whereを使用してプレーヤーのIDで除外します。また、各結果をTeamName
にマッピングしてフォーマットします。
IEnumerable<ViewModel> models = players.Select(p => new ViewModel()
{
PlayerName = p.PlayerName,
Teams = String.Join("/", _db.PlayersInGame.Where(pg => pg.PlayerId == p.PlayerId).Select(pg => pg.TeamName))
});
今、私たちはゲーム数を計算する必要があり、我々は再びPlayersInGame
を読んでするつもりだが、今、私たちはCountメソッドを使用するつもりだ:最後の部分のために、今すぐ
IEnumerable<ViewModel> models = players.Select(p => new ViewModel()
{
PlayerName = p.Name,
Teams = String.Join("/", _db.PlayersInGame.Where(pg => pg.PlayerId == p.Id).Select(pg => pg.TeamName)),
GameCount = _db.PlayersInGame.Count(pg => pg.PlayerId == p.Id)
});
を、プレーヤーが何回勝ったのかを数える必要があるので、プレイヤーのゲームに質問し、勝った人の数を数えればよい。最も難しいのは、プレーヤーがホームチームかアウェイチームかを判断することでしょう。
IEnumerable<ViewModel> models = players.Select(p => new ViewModel()
{
PlayerName = p.PlayerName,
Teams = String.Join("/", _db.PlayersInGame.Where(pg => pg.PlayerId == p.PlayerId).Select(pg => pg.TeamName)),
GameCount = _db.PlayersInGame.Count(pg => pg.PlayerId == p.PlayerId),
NumberOfWins = _db.PlayersInGame.Where(pg => pg.PlayerId == p.PlayerId).Count(pg =>
{
Game g = _db.Games.Single(g => g.GameId == pg.GameId);
bool isHome = g.HomeTeamId == pg.TeamId;
return isHome ? (g.HomeTeamScore > g.AwayTeamScore) : (g.AwayTeamScore > g.HomeTeamScore);
})
});
最終結果は:
IEnumerable<ViewModel> models = _db.Players.Select(p => new ViewModel()
{
PlayerName = p.PlayerName,
Teams = String.Join("/", _db.PlayersInGame.Where(pg => pg.PlayerId == p.PlayerId).Select(pg => pg.TeamName)),
GameCount = _db.PlayersInGame.Count(pg => pg.PlayerId == p.PlayerId),
NumberOfWins = _db.PlayersInGame.Where(pg => pg.PlayerId == p.PlayerId).Count(pg =>
{
Game game = _db.Games.Single(g => g.GameId == pg.GameId);
bool isHome = game.HomeTeamId == pg.TeamId;
return isHome ? (game.HomeTeamScore > game.AwayTeamScore) : (game.AwayTeamScore > game.HomeTeamScore);
})
});