public void Calculate()
        {
            using (var scope = serviceScopeFactory.CreateScope())
            {
                var dbContext = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();
                var divisions = dbContext.Results.AsNoTracking().Select(x => x.Division).Distinct().ToList();

                foreach (var division in divisions)
                {
                    var testResults = dbContext.Results.AsNoTracking().Include(x => x.MatchOdds).Where(x => x.Division == division && x.MatchOdds != null).ToList();

                    var accuracy = new Models.Accuracy();
                    accuracy.Division                 = division;
                    accuracy.Matches                  = testResults.Count();
                    accuracy.Recommended              = testResults.Where(x => x.MatchOdds.IsRecommended).Count();
                    accuracy.LowerRecommended         = testResults.Where(x => x.MatchOdds.IsLowerRecommended).Count();
                    accuracy.RecommendedAccuracy      = Math.Round(DecimalExtensions.SafeDivide(testResults.Where(x => x.MatchOdds.Recommended == x.FullTimeResult).Count(), accuracy.Recommended), 2);
                    accuracy.LowerRecommendedAccuracy = Math.Round(DecimalExtensions.SafeDivide(testResults.Where(x => x.MatchOdds.LowerRecommended == x.FullTimeResult).Count(), accuracy.LowerRecommended), 2);
                    accuracy.Calculated               = DateTime.UtcNow;

                    dbContext.Accuracy.Upsert(accuracy)
                    .On(x => new { x.Division })
                    .Run();
                }
            }
        }
예제 #2
0
        private static string ConvertToDecimalPrintable(decimal?theValue, int places = 2)
        {
            var result = theValue.HasValue ? DecimalExtensions.RoundUp((double)theValue, places).ToString("N" + places) : string.Empty;

            return(result);
        }