示例#1
0
        /// <inheritdoc />
        public override Expression <Func <Event, bool> > GetFilterExpression()
        {
            var parameterReplacer = new ParameterReplacer();

            var filterExpression = _specification.GetFilterExpression();

            var parameter = Expression.Parameter(typeof(Event));

            var result = Expression.Lambda <Func <Event, bool> >(
                Expression.Not(
                    parameterReplacer.ReplaceParameterWith(parameter, filterExpression.Body)
                    ),
                parameter);

            return(result);
        }
示例#2
0
        public async Task <IReadOnlyList <Event <string, string> > > GetEventsAsync(EventsSpecification specification = null)
        {
            IQueryable <Event> query = _db.Events;

            if (specification != null)
            {
                query = query.Where(specification.GetFilterExpression());
            }

            var eventsInfo = await query.ToArrayAsync();

            var events = new List <Event <string, string> >(eventsInfo.Length);

            if (eventsInfo.Length == 0)
            {
                return(events);
            }

            var placesRepository = new PlacesRepository(_db);

            var places = await placesRepository.GetPlacesAsync();

            foreach (var eventInfo in eventsInfo)
            {
                var startDate = GetStartDate(eventInfo);
                var endDate   = GetEndDate(eventInfo);

                var @event = new Event <string, string>(eventInfo.Content, startDate, endDate)
                {
                    Id = eventInfo.Id
                };

                if (eventInfo.PlaceId != null)
                {
                    @event.Place = places.GetNodeById(eventInfo.PlaceId);
                }

                events.Add(@event);
            }

            return(events);
        }