Beispiel #1
0
        public async Task <AccountTankByAchievementDto[]> GetAllTanksByAchievement(long accountId, string achievementId)
        {
            var mapper = new AccountTanksInfoDtoMapper();

            var tanks = await _dbContext.PresentAccountTanks.AsNoTracking()
                        .Join(_dbContext.AccountTankStatistics.AsNoTracking(), pt => pt.AccountTankStatisticId,
                              ts => ts.AccountTankStatisticId, (pt, st) => st)
                        .Join(_dbContext.VehicleEncyclopedia.AsNoTracking(), st => st.TankId, v => v.TankId,
                              (st, v) => new { AccountTankStatistic = st, VehicleInfo = v })
                        .Join(_dbContext.AccountInfoTankAchievement.AsNoTracking(),
                              j => new { j.AccountTankStatistic.AccountId, j.AccountTankStatistic.TankId },
                              a => new { a.AccountId, a.TankId },
                              (l, r) => new { l.AccountTankStatistic, l.VehicleInfo, r.AchievementId, r.Count })
                        .Where(j => j.AccountTankStatistic.AccountId == accountId && j.AchievementId == achievementId)
                        .Select(j => new { Tuple = new AccountTanksStatisticsTuple {
                                               Tank = j.AccountTankStatistic, Vehicle = j.VehicleInfo
                                           }, AchievementsCount = j.Count })
                        .ToListAsync();

            var response = new AccountTankByAchievementDto[tanks.Count];

            for (int i = 0; i < tanks.Count; i++)
            {
                response[i] = new AccountTankByAchievementDto {
                    TankInfo          = mapper.Map(tanks[i].Tuple),
                    AchievementId     = achievementId,
                    AchievementsCount = tanks[i].AchievementsCount
                };
            }
            return(response);
        }
Beispiel #2
0
        public IQueryable <AccountTankInfoDto> GetTanksInfoQuery(long accountId)
        {
            var mapper = new AccountTanksInfoDtoMapper();

            return(mapper.ProjectTo(
                       _dbContext.PresentAccountTanks.AsNoTracking()
                       .Where(pt => pt.AccountId == accountId)
                       .Join(_dbContext.AccountTankStatistics.AsNoTracking(), pt => pt.AccountTankStatisticId,
                             ts => ts.AccountTankStatisticId,
                             (pt, st) => st)
                       .Join(_dbContext.VehicleEncyclopedia.AsNoTracking(), st => st.TankId, v => v.TankId,
                             (st, v) => new { AccountTankStatistic = st, VehicleInfo = v })
                       .Select(j => new AccountTanksStatisticsTuple {
                Tank = j.AccountTankStatistic, Vehicle = j.VehicleInfo
            })
                       ));
        }