public async Task <PopularResult <List <VeComStaDto> > > GetVeComStaAsync(VeComStaQueryDto dto) { var result = new PopularResult <List <VeComStaDto> >(); var oilCostQuery = _oilCostRepoitory.Where(x => x.RefuelingTime >= dto.StartTime && x.RefuelingTime <= dto.EndTime).GroupBy(x => x.VehicleId).Select(x => new { VeId = x.Key, OilCost = x.Sum(i => i.Expend) }); var mileageQuery = _vehicleMileageRepository.Where(x => x.RecordDate >= dto.StartTime && x.RecordDate <= dto.EndTime).GroupBy(x => x.VehicleId).Select(x => new { VeId = x.Key, Mileage = (x.Max(i => i.Mileage) - x.Min(i => i.Mileage)) }); var maintenanceExpendQuery = _maintenanceRepository.Where(x => x.RecordTime >= dto.StartTime && x.RecordTime <= dto.EndTime).GroupBy(x => x.VehicleId).Select(x => new { VeId = x.Key, maintenanceExpend = x.Sum(i => i.Expend) }); var all = from v in _vehicleRepository.Where(x => x.IsDelete == 0).WhereIf(dto.UnitId.HasValue, x => x.UnitId == dto.UnitId.Value) join oil in oilCostQuery on v.Id equals oil.VeId into voil from newvoil in voil.DefaultIfEmpty() join mil in mileageQuery on v.Id equals mil.VeId into vmil from newvmil in vmil.DefaultIfEmpty() join mai in maintenanceExpendQuery on v.Id equals mai.VeId into vmai from newvmai in vmai.DefaultIfEmpty() select new VeComStaDto() { License = v.License, OilCost = newvoil.OilCost, Mileage = newvmil.Mileage, Maintenance = newvmai.maintenanceExpend }; var list = await AsyncExecuter.ToListAsync(all); result.Success(list); return(result); }
public async Task <PopularResult <PagedResultDto <MaintenanceDto> > > GetListAsync(MaintenanceQueryDto dto) { var result = new PopularResult <PagedResultDto <MaintenanceDto> >(); var countQuery = _maintenanceRepository.Where(x => x.IsDelete == dto.IsDelete); //.WhereIf(!dto.License.IsNullOrWhiteSpace(), maintenance => maintenance.Vehicle.License.Contains(dto.License)); var query = from m in _maintenanceRepository.OrderBy(x => x.CreateTime).PageBy(dto.ToSkipCount(), dto.ToMaxResultCount()).Where(x => x.IsDelete == dto.IsDelete) join v in _vehicleRepository on m.VehicleId equals v.Id into cls from c in cls.DefaultIfEmpty() join d in _dictRepository on m.CostTypeId equals d.Id into md from s in md.DefaultIfEmpty() select new MaintenanceEntity(m.Id) { Address = m.Address, CostType = s, CostTypeId = m.CostTypeId, Expend = m.Expend, RecordTime = m.RecordTime, Vehicle = c, VehicleId = m.VehicleId, //IsDelete = m.IsDelete, CreateTime = m.CreateTime, Creator = m.Creator, Remark = m.Remark, }; var maintenances = await AsyncExecuter.ToListAsync(query); var totalCount = await AsyncExecuter.CountAsync(countQuery); var dtos = ObjectMapper.Map <List <MaintenanceEntity>, List <MaintenanceDto> >(maintenances); result.Success(new PagedResultDto <MaintenanceDto>(totalCount, dtos)); return(result); }