Skip to content

transforms are not applied #93

@mhamri

Description

@mhamri

Hi, I'm aware of this package still is in preview and sorry to file an issue. I am not sure you've worked on this or not or you have any plan to support this, if you share your plan it helps a lot for me to plan my next set of actions.

Being said, I have a case that filters and aggregates are not applied.

URL:

http://localhost:5000/odata/graphMyAssignedActivities?$apply=filter(isLate eq true)/groupby((statusInfo/DisplayName,statusInfo/Color),aggregate(id with count distinct as activitiesCount))

My Current Usage that this query works:

[HttpGet]
[EnableQuery(MaxExpansionDepth = 8)]
public async Task<ActionResult<IQueryable<GraphActivityDto>>> Get([FromQuery] GraphFilter filter) {

    var activities = await _activityService.GetQueryableActivitiesByScope();

    var projected = activities.ProjectTo<GraphActivityDto>(_mapper.ConfigurationProvider);

    if (Request.Query.ContainsKey("$apply")) { //it's because of an issue in EFCore 3.0
        projected = projected.ToLinqToDB();
    }

    return Ok(projected);

}

Updated usage:

[HttpGet]
//[EnableQuery(MaxExpansionDepth = 8)]
public async Task<ActionResult<IQueryable<GraphActivityDto>>> Get(ODataQueryOptions<GraphActivityDto> OdataQueryOptions) {
    
    var activities = await _activityService.GetQueryableActivitiesByScope();
    
    var result = await activities.GetQueryAsync(_mapper, OdataQueryOptions, HandleNullPropagationOption.True);
    return Ok(result);

}

and this is generated Expression

EntityQueryable<Activity>.Select(
    dtoActivity => new GraphActivityDto
    {
        ActivityName = dtoActivity.ActivityName,
        ActivityStandard = (dtoActivity.ActivityStandard == null)
            ? null
            : new ActivityStandardBasicDto
            {
                ActivityType = dtoActivity.ActivityStandard.ActivityType,
                Id = dtoActivity.ActivityStandard.Id,
                Name = dtoActivity.ActivityStandard.Name
            },
        ActivityType = dtoActivity.ActivityStandard.ActivityType,
        ActualEndDate = dtoActivity.ActualEndDate,
        ActualStartDate = dtoActivity.ActualStartDate,
        Id = dtoActivity.Id,
        IsLate = (dtoActivity.PlannedStartDate.HasValue && !dtoActivity.ActualStartDate.HasValue)
            ? ((DateTimeOffset?)DateTimeOffset.Now.ToUniversalTime().AddDays(-1d)) > dtoActivity.PlannedStartDate
            : (dtoActivity.PlannedEndDate.HasValue && !dtoActivity.ActualEndDate.HasValue) && (((DateTimeOffset?)DateTimeOffset.Now.ToUniversalTime().AddDays(-1d)) > dtoActivity.PlannedEndDate),
        IsPromoting = dtoActivity.IsPromoting,
        PlannedEndDate = dtoActivity.PlannedEndDate,
        PlannedStartDate = dtoActivity.PlannedStartDate,
        ProjectId = dtoActivity.Project.Id,
        ProjectName = dtoActivity.Project.Name,
        ProjectPhaseId = dtoActivity.ProjectPhaseId,
        Roles = dtoActivity.Roles.Select(
            dtoActivityRoleAssignment => new ProjectRoleGraphDto
            {
                Id = dtoActivityRoleAssignment.Role.Id,
                Name = dtoActivityRoleAssignment.Role.UserGroup.Name,
                Users = dtoActivityRoleAssignment.Role.ProjectUsersRolesAssignments.Select(t => t.ProjectUser).Select(
                    dtoProjectUser => new ProjectUserGraphDto
                    {
                        Email = dtoProjectUser.User.Email,
                        Id = dtoProjectUser.User.Id,
                        Image = FileResolverExtension.Resolve(dtoProjectUser.User.Picture),
                        Name = dtoProjectUser.User.FullName
                    })
            }),
        StatusInfo = (dtoActivity.Status == null)
            ? null
            : new ActivityStatusDto
            {
                Abbreviation = dtoActivity.Status.Abbreviation,
                Color = dtoActivity.Status.Color,
                DisplayName = dtoActivity.Status.DisplayName,
                Editable = dtoActivity.Status.Editable,
                Id = dtoActivity.Status.Id,
                Name = dtoActivity.Status.Name,
                Order = dtoActivity.Status.Order
            },
        StatusSteps = dtoActivity.StatusSteps.Select(
            dtoActivityStatusStep => new ActivityApprovalGraphDto
            {
                ActivityId = dtoActivityStatusStep.ActivityId,
                ActivityStatusId = dtoActivityStatusStep.ActivityStatusId,
                ApprovalStep = (dtoActivityStatusStep.ApprovalStep == null)
                    ? null
                    : new ApprovalStepDto
                    {
                        Color = dtoActivityStatusStep.ApprovalStep.Color,
                        Done = dtoActivityStatusStep.ApprovalStep.Done,
                        Id = dtoActivityStatusStep.ApprovalStep.Id,
                        Name = dtoActivityStatusStep.ApprovalStep.Name,
                        Order = dtoActivityStatusStep.ApprovalStep.Order,
                        Role = dtoActivityStatusStep.ApprovalStep.Role,
                        Todo = dtoActivityStatusStep.ApprovalStep.Todo
                    },
                ApprovalStepId = dtoActivityStatusStep.ApprovalStepId,
                Id = dtoActivityStatusStep.Id,
                IsCurrentStatus = ((!dtoActivityStatusStep.ProjectUsersAssignments.Any() && !dtoActivityStatusStep.RoleAssignments.Any()) || dtoActivityStatusStep.RoleAssignments.Any(
                    ro => !ro.ProjectRole.ProjectUsersRolesAssignments.Any(
                        usr => dtoActivityStatusStep.Votes.Any(v => (v.ProjectUserId == usr.ProjectUserId) && (((int)v.Status) == 2))))) || (dtoActivityStatusStep.ProjectUsersAssignments.Any(
                    usr => !dtoActivityStatusStep.Votes.Any(v => (v.ProjectUserId == usr.ProjectUserId) && (((int)v.Status) == 2))) && (dtoActivityStatusStep.Activity.ActivityStatusId == dtoActivityStatusStep.ActivityStatusId)),
                RequestedAt = dtoActivityStatusStep.ProjectUsersAssignments.Any()
                    ? dtoActivityStatusStep.ProjectUsersAssignments.First().RequestedAt
                    : dtoActivityStatusStep.RoleAssignments.Any()
                        ? dtoActivityStatusStep.RoleAssignments.First().RequestedAt
                        : null,
                Roles = dtoActivityStatusStep.RoleAssignments.Select(
                    dtoActivityStatusStepRoleAssignment => new ProjectRoleGraphDto
                    {
                        Id = dtoActivityStatusStepRoleAssignment.ProjectRole.Id,
                        Name = dtoActivityStatusStepRoleAssignment.ProjectRole.UserGroup.Name,
                        Users = dtoActivityStatusStepRoleAssignment.ProjectRole.ProjectUsersRolesAssignments.Select(t => t.ProjectUser).Select(
                            dtoProjectUser => new ProjectUserGraphDto
                            {
                                Email = dtoProjectUser.User.Email,
                                Id = dtoProjectUser.User.Id,
                                Image = FileResolverExtension.Resolve(dtoProjectUser.User.Picture),
                                Name = dtoProjectUser.User.FullName
                            })
                    }),
                Users = dtoActivityStatusStep.ProjectUsersAssignments.Select(t => t.ProjectUser).Select(
                    dtoProjectUser => new ProjectUserGraphDto
                    {
                        Email = dtoProjectUser.User.Email,
                        Id = dtoProjectUser.User.Id,
                        Image = FileResolverExtension.Resolve(dtoProjectUser.User.Picture),
                        Name = dtoProjectUser.User.FullName
                    }),
                Votes = dtoActivityStatusStep.Votes.Select(
                    dtoActivityStatusStepVote => new ActivityStatusStepVoteGraphDto
                    {
                        ActivityStatusStepId = dtoActivityStatusStepVote.ActivityStatusStepId,
                        Justification = dtoActivityStatusStepVote.Justification,
                        ProjectUserId = dtoActivityStatusStepVote.ProjectUserId,
                        RespondedAt = dtoActivityStatusStepVote.RespondedAt,
                        Status = dtoActivityStatusStepVote.Status,
                        User = (dtoActivityStatusStepVote.ProjectUser == null)
                            ? null
                            : new ProjectUserGraphDto
                            {
                                Email = dtoActivityStatusStepVote.ProjectUser.User.Email,
                                Id = dtoActivityStatusStepVote.ProjectUser.User.Id,
                                Image = FileResolverExtension.Resolve(dtoActivityStatusStepVote.ProjectUser.User.Picture),
                                Name = dtoActivityStatusStepVote.ProjectUser.User.FullName
                            }
                    })
            }),
        Users = dtoActivity.Users.Select(u => u.ProjectUser).Select(
            dtoProjectUser => new ProjectUserGraphDto
            {
                Email = dtoProjectUser.User.Email,
                Id = dtoProjectUser.User.Id,
                Image = FileResolverExtension.Resolve(dtoProjectUser.User.Picture),
                Name = dtoProjectUser.User.FullName
            })
    })

as you can see, no group by or count distinct is added

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions