private void GetBatterResult(Player player) { // 타자에 대한 경기별 기록을 얻어온다. var matches = dbMgr.SelectAll<Match>(); var ths = dbMgr.SelectAll<Th>(); var bats = dbMgr.SelectAll<Bat>(); var wMatches = from m in matches join t in ths on m.Id equals t.MatchId join b in bats on t.Id equals b.ThId where b.HitterId == player.PlayerId && m.GameId.StartsWith("2014") group b by new { m.GameId } into g select new { GameId = g.Key.GameId, Total = g.Count(), Hit = g.Count(x => x.PResult == PResultType.Hit), }; dgMatch.DataSource = wMatches; }
public Player Parse(String html, String team, Int32 playerId) { HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); var node = doc.DocumentNode.SelectSingleNode(".//div [@class='player_info']"); Player player = new Player(); Int32 tempNumber = 0; String[] spliter = new String[] { " " }; // 플레이어 아이디 player.PlayerId = playerId; // 이미지 파일명 try { player.SCR = node.SelectSingleNode(".//div//img").GetAttributeValue("src", ""); } catch { player.SCR = null; } // 팀명 player.Team = team; // 이름 var nodes = node.SelectNodes(".//li//span"); player.Name = nodes[0].InnerText; // 백넘버 if (Int32.TryParse(nodes[1].InnerText, out tempNumber)) { player.BackNumber = tempNumber; } else { player.BackNumber = null; } // 생년월일 String birthDate = nodes[2].InnerText; birthDate = birthDate.Replace("년", "").Replace("월", "").Replace("일", "").Replace(" ", ""); if (birthDate.Length == 8) { player.BirthDate = birthDate.Replace("년", "").Replace("월", "").Replace("일", "").Replace(" ", ""); } // 포지션, 손잡이 String position = nodes[3].InnerText; position = position.Replace(@"(", " ").Replace(@")", ""); if (position.Split(spliter, StringSplitOptions.RemoveEmptyEntries).Length == 2) { player.Position = position.Split(spliter, StringSplitOptions.RemoveEmptyEntries)[0]; player.Hand = position.Split(spliter, StringSplitOptions.RemoveEmptyEntries)[1]; } // 키, 몸무게 String height = nodes[4].InnerText; height = height.Replace(@"cm/", " ").Replace(@"kg", ""); if (height.Split(spliter, StringSplitOptions.RemoveEmptyEntries).Length == 2) { player.Height = Convert.ToInt32(height.Split(spliter, StringSplitOptions.RemoveEmptyEntries)[0]); player.Weight = Convert.ToInt32(height.Split(spliter, StringSplitOptions.RemoveEmptyEntries)[1]); } // 경력 player.Career = nodes[5].InnerText; // 계약금 player.Deposit = nodes[6].InnerText; // 연봉 player.Salary = nodes[7].InnerText; // 지명순위 player.Rank = nodes[8].InnerText; // 입단년도 player.JoinYear = nodes[9].InnerText; return player; }
// 투수정보를 가지고온다. private void GetPitcherInfo(Player player, DataGridView dg, TextBox tb, DataGridView dgRatio) { var players = dbMgr.SelectAll<Player>(); var matchs = dbMgr.SelectAll<Match>(); var schedules = dbMgr.SelectAll<Schedule>(); var ths = dbMgr.SelectAll<Th>(); var bats = dbMgr.SelectAll<Bat>(); var balls = dbMgr.SelectAll<Ball>(); var pBalls = from m in matchs join s in schedules on m.GameId equals s.GameId join t in ths on m.Id equals t.MatchId join b in bats on t.Id equals b.ThId join ball in balls on b.Id equals ball.BatId where b.PitcherId == player.PlayerId && ball.BallType != "" && (m.GameId.StartsWith("2014") || m.GameId.StartsWith("2013")) group ball by ball.BallType into g select new { g.Key, //MaxSpeed = g.Max(x => x.Speed), //MinSpeed = g.Min(x => x.Speed), Average = g.Average(x => x.Speed) }; dg.DataSource = pBalls; tb.Text = player.Name + " " + player.Hand; // 방어율 가져오기 try { var ratios1 = (from m in matchs join t in ths on m.Id equals t.MatchId join b in bats on t.Id equals b.ThId join p in players on b.HitterId equals p.PlayerId where (m.GameId.StartsWith("2014") || m.GameId.StartsWith("2013")) && b.PitcherId == player.PlayerId select new { H = p.Hand.Substring(2, 2), b.PResult }); var ratios2 = (from r in ratios1 group r by new { r.H } into g select new { Hand = g.Key.H, ratio = g.Count(x => x.PResult == PResultType.Hit) * 1.0 / g.Count() }); dgRatio.DataSource = ratios2; } catch { } }
// 선택한 타자의 교체된 숫자를 구해온다. private Int32 GetChangeCount(Player hitter) { var matches = dbMgr.SelectAll<Match>(); var lineUps = dbMgr.SelectAll<LineUp>(); var wLineUps = from l in lineUps where l.PlayerId == hitter.PlayerId && l.EntryType == EntryType.Starting select l; var wwLineUps = from l in wLineUps join m in matches on l.MatchId equals m.Id join wl in lineUps on new { l.MatchId, l.BatNumber, l.AttackType } equals new { wl.MatchId, wl.BatNumber, wl.AttackType } where (Convert.ToInt32(m.GameId.Substring(0, 8)) > 20140700 && Convert.ToInt32(m.GameId.Substring(0, 8)) < 20150000) && wl.EntryType == EntryType.Change select wl; return wwLineUps.Count(); }
// 선택한 타자와 선발투수의 상대정보를 얻어온다. private void GetHitterVSInfo(Player hitter, DataGridView sender) { // 투수를 가지고 온다. Player pitcher; if (sender == dgAwayHitter) { pitcher = pitchers[0]; } else { pitcher = pitchers[1]; } var matches = dbMgr.SelectAll<Match>(); var ths = dbMgr.SelectAll<Th>(); var bats = dbMgr.SelectAll<Bat>(); var players = dbMgr.SelectAll<Player>(); // 평균치 데이터 var allResult = (from m in matches join t in ths on m.Id equals t.MatchId join b in bats on t.Id equals b.ThId join p in players on b.PitcherId equals p.PlayerId where m.GameId.StartsWith("2014") && b.HitterId == hitter.PlayerId && b.PitcherId == pitcher.PlayerId group b by new { b.HitterId } into g select new { Total = g.Count(), Hit = g.Count(x => x.PResult == PResultType.Hit), Pass = g.Count(x => x.PResult == PResultType.Pass), Out = g.Count(x => x.PResult == PResultType.Out), Avg = g.Count(x => x.PResult == PResultType.Hit) * 1.0 / g.Count() }); dgHitterVSInfo.DataSource = allResult; }
// 선택한 타자의 투수타입 타격정보를 얻어온다. private void GetHitterTypeInfo(Player hitter) { var matches = dbMgr.SelectAll<Match>(); var ths = dbMgr.SelectAll<Th>(); var bats = dbMgr.SelectAll<Bat>(); var players = dbMgr.SelectAll<Player>(); // 평균치 데이터 var allResult = (from m in matches join t in ths on m.Id equals t.MatchId join b in bats on t.Id equals b.ThId join p in players on b.PitcherId equals p.PlayerId where (Convert.ToInt32(m.GameId.Substring(0, 8)) > 20140700 && Convert.ToInt32(m.GameId.Substring(0, 8)) < 20150000) && b.HitterId == hitter.PlayerId group b by new { b.HitterId, Hand = p.Hand.Substring(0, 2) } into g select new { Hand = g.Key.Hand, Total = g.Count(), Hit = g.Count(x => x.PResult == PResultType.Hit), Pass = g.Count(x => x.PResult == PResultType.Pass), Out = g.Count(x => x.PResult == PResultType.Out), Avg = g.Count(x => x.PResult == PResultType.Hit) * 1.0 / g.Count() }); dgHitterTypeInfo.DataSource = allResult; }
private Int32 GetHitCount(String date, Player p) { var players = dbMgr.SelectAll<Player>(); var matchs = dbMgr.SelectAll<Match>(); var schedules = dbMgr.SelectAll<Schedule>(); var ths = dbMgr.SelectAll<Th>(); var bats = dbMgr.SelectAll<Bat>(); var hitcount = (from m in matchs join s in schedules on m.GameId equals s.GameId join t in ths on m.Id equals t.MatchId join b in bats on t.Id equals b.ThId where m.GameId.Substring(0, 8) == date && b.HitterId == p.PlayerId && b.PResult == PResultType.Hit select b).Count(); return hitcount; }