示例#1
0
        public static async Task <DsResponse> GetCrosstableFromTimeResults(sc2dsstatsContext context, DsRequest request)
        {
            var timestrings = DSData.Timestrings(request.Timespan, true);

            var results = await context.DsTimeResults
                          .AsNoTracking()
                          .Where(x =>
                                 x.Player == request.Player &&
                                 timestrings.Contains(x.Timespan))
                          .ToListAsync();

            CrosstableResponse response = new CrosstableResponse()
            {
                Interest = "CrossTable",
                Items    = new List <CrosstableResponseItem>()
            };

            var removeMonths = new List <string>()
            {
                DateTime.Today.ToString("yyyyMM")
            };

            if (DateTime.Today.Day < 16)
            {
                removeMonths.Add((DateTime.Today.AddMonths(-1)).ToString("yyyyMM"));
            }

            foreach (var cmdr in DSData.cmdrs)
            {
                var cmdrResults = results.Where(x => x.Cmdr == cmdr).ToArray();

                foreach (var vs in DSData.cmdrs)
                {
                    if (vs == cmdr)
                    {
                        response.Items.Add(new CrosstableResponseItem());
                    }
                    else
                    {
                        var vsResults    = cmdrResults.Where(x => x.Opp == vs).ToArray();
                        var oldVsResults = vsResults.Where(x => !removeMonths.Contains(x.Timespan)).ToArray();
                        response.Items.Add(new CrosstableResponseItem()
                        {
                            Label    = $"{cmdr} vs {vs}",
                            Count    = vsResults.Sum(s => s.Count),
                            Wins     = vsResults.Sum(s => s.Wins),
                            OldCount = oldVsResults.Sum(s => s.Count),
                            OldWins  = oldVsResults.Sum(s => s.Wins),
                        });
                    }
                }
            }
            return(response);
        }
示例#2
0
        public static async Task <DsResponse> GetCrossTableData(DsRequest request, sc2dsstatsContext context)
        {
            var results = await GetData(request, context);


            CrosstableResponse response = new CrosstableResponse()
            {
                Interest = "CrossTable",
                Items    = new List <CrosstableResponseItem>()
            };

            foreach (var cmdr in Enum.GetValues <DSData.Commander>())
            {
                var cmdrResults = results.Where(x => x.Race == (byte)cmdr).ToArray();

                foreach (var vs in Enum.GetValues <DSData.Commander>())
                {
                    if (vs == cmdr)
                    {
                        response.Items.Add(new CrosstableResponseItem());
                    }
                    else
                    {
                        var vsResults    = cmdrResults.Where(x => x.OppRace == (byte)vs).ToArray();
                        var oldVsResults = vsResults.Where(x => x.GameTime < request.EndTime.AddDays(DateTime.Today.Day < 16 ? -60 : -30)).ToArray();
                        response.Items.Add(new CrosstableResponseItem()
                        {
                            Label    = $"{cmdr} vs {vs}",
                            Count    = vsResults.Length,
                            Wins     = vsResults.Where(x => x.Win == true).Count(),
                            OldCount = oldVsResults.Length,
                            OldWins  = oldVsResults.Where(x => x.Win == true).Count(),
                        });
                    }
                }
            }
            return(response);
        }