public async Task <IPagedList <VehicleModel> > ReadVehicleModels(IReadVehicleModelsParams readParams) { return(await repository.ReadVehicleModels(readParams)); }
public async Task <PagedList <VehicleModel> > ReadVehicleModels(IReadVehicleModelsParams readParams) { var vehicleModelsJoinQuery = dbSet .Join(dbContext.Set <VehicleMakeEntity>(), model => model.MakeId, make => make.Id, (model, make) => new VehicleModel { Id = model.Id, Name = model.Name, Abrv = model.Abrv, Make = new VehicleMake { Id = make.Id, Name = make.Name, Abrv = make.Abrv } }); var nameFilter = !string.IsNullOrWhiteSpace(readParams.Name) ? readParams.Name.Trim() : null; var abrvFilter = !string.IsNullOrWhiteSpace(readParams.Abrv) ? readParams.Abrv.Trim() : null; var makeNameFilter = !string.IsNullOrWhiteSpace(readParams.MakeName) ? readParams.MakeName.Trim() : null; var makeFilter = !string.IsNullOrWhiteSpace(readParams.MakeName) ? readParams.MakeName.Trim() : null; if (nameFilter != null) { vehicleModelsJoinQuery = vehicleModelsJoinQuery.Where(n => n.Name == nameFilter); } if (abrvFilter != null) { vehicleModelsJoinQuery = vehicleModelsJoinQuery.Where(n => n.Abrv == abrvFilter); } if (makeNameFilter != null) { vehicleModelsJoinQuery = vehicleModelsJoinQuery.Where(n => n.Make.Name == makeNameFilter); } var orderBy = !string.IsNullOrWhiteSpace(readParams.OrderBy) ? readParams.OrderBy.Trim().ToLowerInvariant() : null; if (orderBy != null) { vehicleModelsJoinQuery = orderBy switch { string value when value == "name" || value == "name_desc" => value == "name_desc" ? vehicleModelsJoinQuery.OrderByDescending(s => s.Name) : vehicleModelsJoinQuery.OrderBy(s => s.Name), string value when value == "abrv" || value == "abrv_desc" => value == "abrv_desc" ? vehicleModelsJoinQuery.OrderByDescending(s => s.Abrv) : vehicleModelsJoinQuery.OrderBy(s => s.Abrv), string value when value == "makename" || value == "makename_desc" => value == "name_desc" ? vehicleModelsJoinQuery.OrderByDescending(s => s.Make.Name) : vehicleModelsJoinQuery.OrderBy(s => s.Make.Name), _ => vehicleModelsJoinQuery.OrderBy(s => s.Name), }; } var pagedVehicleModels = await PagedList <VehicleModel> .CreateAsync(vehicleModelsJoinQuery, readParams.PageSize, readParams.PageNumber); return(pagedVehicleModels); }