public Task <PagedCollection <IValueSetBackingItem> > GetValueSetBackingItemsAsync( string filterText, IPagerSettings pagerSettings, IEnumerable <Guid> codeSystemGuids, IEnumerable <ValueSetStatus> statusCodes, bool latestVersionsOnly = true) { var dtos = latestVersionsOnly ? this.DbSet.Where(GetBaseExpression(statusCodes)) : this.DbSet.AsQueryable(); #pragma warning disable CA1307 // Specify StringComparison if (!filterText.IsNullOrWhiteSpace()) { dtos = dtos.Where( dto => dto.ValueSetNM.Contains(filterText) || dto.ValueSetReferenceID.StartsWith(filterText)); } #pragma warning restore CA1307 // Specify StringComparison var systemCodes = codeSystemGuids as Guid[] ?? codeSystemGuids.ToArray(); if (systemCodes.Any()) { var vsGuids = this.sharedContext.ValueSetCodes.Where(code => systemCodes.Contains(code.CodeSystemGuid)) .Select(code => code.ValueSetGUID) .Distinct(); dtos = dtos.Join(vsGuids, dto => dto.ValueSetGUID, key => key, (dto, key) => dto); } var orderingStrategy = this.orderingStrategyFactory.GetValueSetStrategy( this.sharedContext, systemCodes); dtos = orderingStrategy.SetOrdering(dtos, pagerSettings.AsOrderingParameters()); return(this.CreatePagedCollectionAsync(dtos, pagerSettings)); }
private async Task <PagedCollection <IValueSetCode> > CreatePagedCollectionAsync( IQueryable <ValueSetCodeDto> source, IPagerSettings pagerSettings) { var defaultItemsPerPage = this.sharedContext.Settings.DefaultItemsPerPage; var pagingStrategy = this.pagingStrategyFactory.GetPagingStrategy <IValueSetCode>(defaultItemsPerPage); var orderingStrategy = this.orderingStrategyFactory.GetValueSetCodeStrategy(); pagingStrategy.EnsurePagerSettings(pagerSettings); var count = await source.CountAsync(); source = orderingStrategy.SetOrdering(source, pagerSettings.AsOrderingParameters()); var items = await source.Skip((pagerSettings.CurrentPage - 1) *pagerSettings.ItemsPerPage) .Take(pagerSettings.ItemsPerPage) .ToListAsync(); var factory = new ValueSetCodeFactory(); // Can't cache at this point since codeGuid can be null in db. // If this changes in the future, caching should/could be implemented. return(pagingStrategy.CreatePagedCollection( items.Select(factory.Build), count, pagerSettings)); }