コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }