private async Task <IReadOnlyCollection <AttendanceSessionModel> > LoadItems() { var command = new AttendanceSessionQuery(User, Tenant.Value.Id); command.SearchText = Query; command.TopicId = TopicId; if (Year.HasValue && Month.HasValue && Month.Value > 0) { var startDate = new DateTime(Year.Value, Month.Value, 1); command.StartDate = startDate; command.EndDate = startDate.AddMonths(1); } else if (Year.HasValue) { var startDate = new DateTime(Year.Value, 1, 1); command.StartDate = startDate; command.EndDate = startDate.AddYears(1); } var result = await Mediator.Send(command); return(result); }
protected override async Task <IReadOnlyCollection <AttendanceSessionModel> > Process(AttendanceSessionQuery request, CancellationToken cancellationToken) { var query = DataContext.Attendances .AsNoTracking() .Where(q => q.TenantId == request.TenantId); if (request.TopicId.HasValue) { query = query.Where(q => q.Session.TopicId == request.TopicId.Value); } if (request.UserName.HasValue()) { query = query.Where(q => q.AttendeeEmail.Contains(request.UserName)); } if (request.StartDate.HasValue) { query = query.Where(q => q.Session.StartDate >= request.StartDate && q.Session.StartDate < request.EndDate); } if (request.SearchText.HasValue()) { query = query.Where(q => q.Session.Topic.Title.Contains(request.SearchText)); } query = query .OrderBy(q => q.Session.StartDate) .ThenBy(q => q.Session.StartTime) .ThenBy(q => q.Session.Topic.Title); var result = await query .ProjectTo <AttendanceSessionModel>(Mapper.ConfigurationProvider) .ToListAsync(cancellationToken); return(result); }