public async Task <IActionResult> PerUserStatistics() { // RichUser var richUsers = await(from user in _context.Users .Include(U => U.Purchases) .ThenInclude(P => P.Goods) let TotalPurchasePrice = user.Purchases.Sum(P => P.Goods.Price) orderby TotalPurchasePrice descending select new { UserId = user.Id, UserEmail = BoardHelper.GetHidedUserEmail(user.Email), TotalPurchasePrice }.ToExpando()) .Take(5).ToListAsync(); // LuckyUser var luckyUsers = await(from user in _context.Users .Include(U => U.Purchases) .ThenInclude(P => P.ResultItemGoods) .ThenInclude(RIG => RIG.ItemGoods) .ThenInclude(IG => IG.Item) let Lucky = user.Purchases.Sum(P => P.ResultItemGoods.ItemGoods.Probability) / user.Purchases.Count where user.Purchases.Count > 0 orderby Lucky select new { UserId = user.Id, UserEmail = BoardHelper.GetHidedUserEmail(user.Email), Lucky, TotalPurchaseCount = user.Purchases.Count, Items = user.Purchases.Select(P => P.ResultItemGoods.ItemGoods).OrderBy(IG => IG.Probability).Take(5).Select(IG => IG.Item).ToList() }.ToExpando()) .Take(5).ToListAsync(); return(PartialView("_PerUserStatistics", new PerUserStatisticsViewModel { RichUsers = richUsers, LuckyUsers = luckyUsers })); }