private IQueryable <ValueSetDescriptionDto> CodeCountFieldOrderBy(
            IQueryable <ValueSetDescriptionDto> query,
            IOrderingParameters parameters)
        {
            var countQuery = this.sharedContext.ValueSetCounts.AsQueryable();

            if (this.codeSystemGuids.Any())
            {
                countQuery = countQuery.Where(cc => this.codeSystemGuids.Contains(cc.CodeSystemGUID));
            }

            var countsDtos = countQuery.GroupBy(cc => cc.ValueSetGUID)
                             .Select(group => new CodeCountResultDto
            {
                ValueSetGuid = group.Key,
                CodeCount    = group.Sum(s => s.CodeSystemPerValueSetNBR)
            });

            var combined = query.Join(
                countsDtos,
                vsDto => vsDto.ValueSetGUID,
                countDto => countDto.ValueSetGuid,
                (vsDto, countDto) => new
            {
                ValueSetDescriptionDto = vsDto,
                countDto.CodeCount
            });

            return((parameters.Direction == SortDirection.Asc
                          ? combined.OrderBy(c => c.CodeCount)
                          : combined.OrderByDescending(c => c.CodeCount))
                   .Select(c => c.ValueSetDescriptionDto));
        }
 protected override IQueryable <ValueSetDescriptionDto> PerformOrdering(
     IQueryable <ValueSetDescriptionDto> query,
     IOrderingParameters parameters)
 {
     return(this.IsCodeCountOrdering(parameters)
                ? this.CodeCountFieldOrderBy(query, parameters)
                : this.ValueSetFieldOrderBy(query, parameters));
 }
        public IQueryable <TResult> SetOrdering(IQueryable <TResult> query, IOrderingParameters parameters)
        {
            if (this.IsOrderedQueryable(query))
            {
                throw new ArgumentException("IQueryable<T> is already ordered.", nameof(query));
            }

            return(this.PerformOrdering(query, parameters));
        }
Example #4
0
        private Expression <Func <ValueSetCodeDto, string> > GetOrderByExpression(IOrderingParameters parameters)
        {
            if (parameters.FieldName != "Name")
            {
                throw new ArgumentException("ValueSetCodes may only be ordered by Name");
            }

            return(dto => dto.CodeDSC);
        }
        private IQueryable <ValueSetDescriptionDto> ValueSetFieldOrderBy(
            IQueryable <ValueSetDescriptionDto> query,
            IOrderingParameters parameters)
        {
            var orderByExpr = this.GetOrderExpression(parameters);

            return(parameters.Direction == SortDirection.Asc
                         ? query.OrderBy(orderByExpr)
                         : query.OrderByDescending(orderByExpr));
        }
 protected abstract IQueryable <TResult> PerformOrdering(IQueryable <TResult> query, IOrderingParameters parameters);
        private Expression <Func <ValueSetDescriptionDto, object> > GetOrderExpression(IOrderingParameters parameters)
        {
            switch (parameters.FieldName.ToLowerInvariant())
            {
            case "valuesetreferenceid":
                return(dto => dto.ValueSetReferenceID);

            case "sourcedescription":
                return(dto => dto.SourceDSC);

            case "versiondate":
                return(dto => dto.VersionDTS);

            case "authoritydescription":
                return(dto => dto.AuthorityDSC);

            case "lastmodifieddate":
                return(dto => dto.LastModifiedDTS);

            case "name":
            default:
                return(dto => dto.ValueSetNM);
            }
        }
 private bool IsCodeCountOrdering(IOrderingParameters parameters) =>
 parameters.FieldName.ToLowerInvariant() == CodeCountFieldName;
Example #9
0
        protected override IQueryable <ValueSetCodeDto> PerformOrdering(IQueryable <ValueSetCodeDto> query, IOrderingParameters parameters)
        {
            var orderExpression = this.GetOrderByExpression(parameters);

            return(parameters.Direction == SortDirection.Asc
                         ? query.OrderBy(orderExpression)
                         : query.OrderByDescending(orderExpression));
        }