public async Task <IEnumerable <TaskInfo> > GetTasks(DateTime?sinceWhen = null, string tag = default, TaskStatus status = default, CancellationToken cancellationToken = default) { var query = _context.Tasks.AsQueryable(); if (sinceWhen.HasValue) { query = query.Where(t => t.DateCreated >= sinceWhen.Value); } if (!tag.IsDefault()) { query = query.Where(t => (t.Tags ?? string.Empty).Contains(tag)); } if (!status.IsDefault()) { query = query.Where(t => t.Status == status); } var tasks = await query .OrderByDescending(task => task.DateLastUpdated) .Select(TaskInfoExpressions.ToTaskInfoResponse) .ToArrayAsync(cancellationToken) .ConfigureAwait(false); return(tasks); }