public virtual async Task <PricelistAssignmentSearchResult> SearchPricelistAssignmentsAsync(PricelistAssignmentsSearchCriteria criteria) { var cacheKey = CacheKey.With(GetType(), nameof(SearchPricelistAssignmentsAsync), criteria.GetCacheKey()); return(await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async cacheEntry => { cacheEntry.AddExpirationToken(PricingSearchCacheRegion.CreateChangeToken()); cacheEntry.AddExpirationToken(PricingCacheRegion.CreateChangeToken()); var retVal = AbstractTypeFactory <PricelistAssignmentSearchResult> .TryCreateInstance(); using (var repository = _repositoryFactory()) { var query = repository.PricelistAssignments; if (!criteria.PriceListIds.IsNullOrEmpty()) { query = query.Where(x => criteria.PriceListIds.Contains(x.PricelistId)); } if (!string.IsNullOrEmpty(criteria.Keyword)) { query.Where(x => x.Name.Contains(criteria.Keyword) || x.Description.Contains(criteria.Keyword)); } var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = ReflectionUtility.GetPropertyName <PricelistAssignment>(x => x.Priority) } }; } query = query.OrderBySortInfos(sortInfos); retVal.TotalCount = await query.CountAsync(); if (criteria.Take > 0) { query = query.Skip(criteria.Skip).Take(criteria.Take); var pricelistAssignmentsIds = await query.Select(x => x.Id).ToListAsync(); retVal.Results = (await _pricingService.GetPricelistAssignmentsByIdAsync(pricelistAssignmentsIds.ToArray())) .OrderBy(x => pricelistAssignmentsIds.IndexOf(x.Id)) .ToList(); } } return retVal; })); }
public virtual async Task <PricelistAssignmentSearchResult> SearchPricelistAssignmentsAsync(PricelistAssignmentsSearchCriteria criteria) { var cacheKey = CacheKey.With(GetType(), nameof(SearchPricelistAssignmentsAsync), criteria.GetCacheKey()); return(await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async cacheEntry => { cacheEntry.AddExpirationToken(PricingSearchCacheRegion.CreateChangeToken()); cacheEntry.AddExpirationToken(PricingCacheRegion.CreateChangeToken()); var result = AbstractTypeFactory <PricelistAssignmentSearchResult> .TryCreateInstance(); using (var repository = _repositoryFactory()) { var query = BuildQuery(repository, criteria); var sortInfos = BuildSortExpression(criteria); result.TotalCount = await query.CountAsync(); if (criteria.Take > 0) { var pricelistAssignmentsIds = await query.OrderBySortInfos(sortInfos).ThenBy(x => x.Id) .Select(x => x.Id) .Skip(criteria.Skip).Take(criteria.Take) .AsNoTracking() .ToArrayAsync(); var unorderedResults = await _pricingService.GetPricelistAssignmentsByIdAsync(pricelistAssignmentsIds); result.Results = unorderedResults.OrderBy(x => Array.IndexOf(pricelistAssignmentsIds, x.Id)).ToList(); } } return result; })); }