public async Task <IPagedResults <IncidentTask> > GetIncidentTasksAsync(IncidentTaskSearchQueryParameters searchQuery) { var items = await IncidentTasks .GroupJoin(db.EvacueeRegistrations.Select(e => new { e.IncidentTaskId, evacueeCount = e.Evacuees.Count() }), incident => incident.Id, summary => summary.IncidentTaskId, (incident, summary) => new { incident = incident, evacueeCount = summary.Sum(s => s.evacueeCount), } ) .Where(t => !searchQuery.HasQuery() || t.incident.Community.Id == Guid.Parse(searchQuery.Query)) .Where(t => searchQuery.Active == t.incident.Active) .Sort(searchQuery.SortBy ?? "incident.id") .ToArrayAsync(); var tasks = items .Select(i => mapper.Map <IncidentTask>(i.incident, opts => opts.Items["EvacueeCount"] = i.evacueeCount)) .Where(t => !searchQuery.ActiveTasks.HasValue || t.TaskActive == searchQuery.ActiveTasks.Value); return(new PaginatedList <IncidentTask>(tasks, searchQuery.Offset, searchQuery.Limit)); }
public async Task <IActionResult> Get([FromQuery] IncidentTaskSearchQueryParameters searchQuery) { var items = await dataInterface.GetIncidentTasksAsync(searchQuery); return(Json(items)); }