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)); }
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;
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)); }