public IQueryable <RequestGetModel> GetAllFilteredQuery(FilteredStoreLoadParams <RequestListFilters> loadParams) { var baseQuery = _dataStore.GetAll <Request>(); if (loadParams.Filter != null) { baseQuery = baseQuery //костыль. так ка кзаказчик хочет фильтровать по типу "малые" и "большие", поэтому эти критерии заведены как отрицательные значения .WhereIf(loadParams.Filter.ContainerTypeId.HasValue && loadParams.Filter.ContainerTypeId > 0, x => x.Container.ContainerType.Id == loadParams.Filter.ContainerTypeId.Value) //Малые (6,8) .WhereIf(loadParams.Filter.ContainerTypeId.HasValue && loadParams.Filter.ContainerTypeId == -1, x => x.Container.ContainerType.Capacity <= 8) //Большие (более 8) .WhereIf(loadParams.Filter.ContainerTypeId.HasValue && loadParams.Filter.ContainerTypeId == -2, x => x.Container.ContainerType.Capacity > 8) .WhereIf(loadParams.Filter.CarId.HasValue, x => x.Car.Id == loadParams.Filter.CarId.Value) .WhereIf(loadParams.Filter.DriverId.HasValue, x => x.Driver.Id == loadParams.Filter.DriverId.Value) .WhereIf(loadParams.Filter.DateStart.HasValue, x => x.PlannedDateTime > loadParams.Filter.DateStart.Value) .WhereIf(loadParams.Filter.DateEnd.HasValue, x => x.PlannedDateTime < loadParams.Filter.DateEnd.Value) .WhereIf(!string.IsNullOrEmpty(loadParams.Filter.CustomerFilter), x => x.Customer.Name.ToLower().Contains(loadParams.Filter.CustomerFilter.ToLower())) .WhereIf(!string.IsNullOrEmpty(loadParams.Filter.AddressFilter), x => x.Address.ToLower().Contains(loadParams.Filter.AddressFilter.ToLower())) .WhereIf(!string.IsNullOrEmpty(loadParams.Filter.ContactPersonPhoneFilter), x => x.ContactPersonPhone.ToLower() .Contains(loadParams.Filter.ContactPersonPhoneFilter.ToLower())) .WhereIf(loadParams.Filter.IsPaids.HasValue, x => x.IsPaid == loadParams.Filter.IsPaids) .WhereIf(loadParams.Filter.RequestId.HasValue, x => x.Id == loadParams.Filter.RequestId) //тип заявки .WhereIf( loadParams.Filter.RequestType.HasValue && loadParams.Filter.RequestType.Value == RequestType.Install, x => x.Type == RequestType.Install ) .WhereIf( loadParams.Filter.RequestType.HasValue && loadParams.Filter.RequestType.Value == RequestType.Uninstall, x => x.Type == RequestType.Uninstall ) //статус заявки .WhereIf( loadParams.Filter.RequestStatus.HasValue && loadParams.Filter.RequestStatus.Value == RequestStatus.New, x => x.Status == RequestStatus.New ) .WhereIf( loadParams.Filter.RequestStatus.HasValue && loadParams.Filter.RequestStatus.Value == RequestStatus.InWork, x => x.Status == RequestStatus.InWork ) .WhereIf( loadParams.Filter.RequestStatus.HasValue && loadParams.Filter.RequestStatus.Value == RequestStatus.Done, x => x.Status == RequestStatus.Done ) .WhereIf( loadParams.Filter.RequestStatus.HasValue && loadParams.Filter.RequestStatus.Value == RequestStatus.Rejected, x => x.Status == RequestStatus.Rejected ); } var query = baseQuery .Select(RequestGetModel.ProjectionExpression) .OrderByDescending(x => x.PlannedDateTime); return(query); }
public HttpResponseMessage GetList([FromUri] FilteredStoreLoadParams <RequestListFilters> loadParams) { var query = requestService.GetAllFilteredQuery(loadParams); return(SuccessListFrom(query, loadParams)); }