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