public Task <SearchResult <HumanTaskInstanceAggregate> > Search(SearchHumanTaskInstanceParameter parameter, CancellationToken token)
        {
            IQueryable <HumanTaskInstanceAggregate> content = _humanTaskInstances.AsQueryable();

            if (parameter.StatusLst != null && parameter.StatusLst.Any())
            {
                content = content.Where(_ => parameter.StatusLst.Contains(_.Status));
            }

            if (!string.IsNullOrWhiteSpace(parameter.ActualOwner))
            {
                content = content.Where(_ => !string.IsNullOrWhiteSpace(_.ActualOwner) && _.ActualOwner.StartsWith(parameter.ActualOwner, StringComparison.InvariantCultureIgnoreCase));
            }

            content = content.Where(_ => (IsAuthorized(_.PotentialOwners, parameter.UserIdentifier, parameter.GroupNames) ||
                                          IsAuthorized(_.BusinessAdministrators, parameter.UserIdentifier, parameter.GroupNames) ||
                                          IsAuthorized(_.TaskInitiators, parameter.UserIdentifier, parameter.GroupNames)));
            if (MAPPING_HUMANTASKINSTANCE_TO_PROPERTYNAME.ContainsKey(parameter.OrderBy))
            {
                content = content.InvokeOrderBy(MAPPING_HUMANTASKINSTANCE_TO_PROPERTYNAME[parameter.OrderBy], parameter.Order);
            }

            int totalLength = content.Count();
            var result      = content.Skip(parameter.StartIndex).Take(parameter.Count);

            return(Task.FromResult(new SearchResult <HumanTaskInstanceAggregate>
            {
                Content = result.ToList(),
                Count = parameter.Count,
                StartIndex = parameter.StartIndex,
                TotalLength = totalLength
            }));
        }
        public async Task <FindResponse <HumanTaskInstanceAggregate> > Search(SearchHumanTaskInstanceParameter parameter, CancellationToken token)
        {
            IQueryable <HumanTaskInstanceAggregate> content = _dbContext.HumanTaskInstanceAggregate
                                                              .Include(_ => _.PeopleAssignments);

            if (parameter.StatusLst != null && parameter.StatusLst.Any())
            {
                content = content.Where(_ => parameter.StatusLst.Contains(_.Status));
            }

            if (!string.IsNullOrWhiteSpace(parameter.ActualOwner))
            {
                content = content.Where(_ => !string.IsNullOrWhiteSpace(_.ActualOwner) && _.ActualOwner.StartsWith(parameter.ActualOwner, StringComparison.InvariantCultureIgnoreCase));
            }

            var groupNames = parameter.GroupNames.ToList();

            content = content.Where(_ => _.PeopleAssignments.Any(p =>
                                                                 (p.Usage == PeopleAssignmentUsages.POTENTIALOWNER && p.Type == PeopleAssignmentTypes.USERIDENTIFIERS && p.Value == parameter.UserIdentifier) ||
                                                                 (p.Usage == PeopleAssignmentUsages.BUSINESSADMINISTRATOR && p.Type == PeopleAssignmentTypes.USERIDENTIFIERS && p.Value == parameter.UserIdentifier) ||
                                                                 (p.Usage == PeopleAssignmentUsages.TASKINITIATOR && p.Type == PeopleAssignmentTypes.USERIDENTIFIERS && p.Value == parameter.UserIdentifier) ||
                                                                 (p.Usage == PeopleAssignmentUsages.POTENTIALOWNER && p.Type == PeopleAssignmentTypes.GROUPNAMES && parameter.GroupNames.Contains(p.Value)) ||
                                                                 (p.Usage == PeopleAssignmentUsages.BUSINESSADMINISTRATOR && p.Type == PeopleAssignmentTypes.GROUPNAMES && parameter.GroupNames.Contains(p.Value)) ||
                                                                 (p.Usage == PeopleAssignmentUsages.TASKINITIATOR && p.Type == PeopleAssignmentTypes.GROUPNAMES && parameter.GroupNames.Contains(p.Value))));

            if (MAPPING_HUMANTASKINSTANCE_TO_PROPERTYNAME.ContainsKey(parameter.OrderBy))
            {
                content = content.InvokeOrderBy(MAPPING_HUMANTASKINSTANCE_TO_PROPERTYNAME[parameter.OrderBy], parameter.Order);
            }

            int totalLength = content.Count();
            var result      = content.Skip(parameter.StartIndex).Take(parameter.Count);

            return(new FindResponse <HumanTaskInstanceAggregate>
            {
                Content = await result.ToListAsync(token),
                Count = parameter.Count,
                StartIndex = parameter.StartIndex,
                TotalLength = totalLength
            });
        }