Beispiel #1
0
        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);
        }