private Expression <Func <TStoredEvent, bool> > AddObjectIdFilter(Expression <Func <TStoredEvent, bool> > result)
        {
            var criteria = default(Expression <Func <TStoredEvent, bool> >);

            foreach (var filter in this.criteria.ObjectInstances)
            {
                var sourceType = typeNameConverter.Invoke(filter.ObjectType);
                // Builds: TargetObject != null && TargetObject.ObjectId == id && TargetObject.ObjectType == type

                var predicate = ((Expression <Func <TStoredEvent, bool> >)
                                     (e => e.ObjectId != null && e.ObjectType == sourceType)).And
                                    (EventObjectIdEquals(filter.ObjectId));

                // ORs all object+id filters.
                criteria = Or(criteria, predicate);
            }

            if (criteria == null)
            {
                return(result);
            }

            // AND the criteria built so far.
            return(And(result, criteria));
        }
 /// <summary>
 /// Converts a criteria object passed to the queryable event store
 /// <see cref="IEventStore{TObjectId, TBaseEvent}.Query"/> method
 /// into a Linq expression that can be used directly as a filter (<c>Where</c>)
 /// over the stored queryable event stream.
 /// </summary>
 /// <typeparam name="TObjectId">The type of identifier used by domain objects in the domain.</typeparam>
 /// <typeparam name="TBaseEvent">The base type or interface implemented by events in the domain.</typeparam>
 /// <typeparam name="TStoredEvent">The type of the stored event.</typeparam>
 /// <param name="store">The store to provide the query expression for.</param>
 /// <param name="criteria">The criteria that will be converted to a Linq expression.</param>
 /// <param name="typeNameConverter">The type name converter to use to transform the <see cref="Type"/>
 /// filters in the criteria object into type name strings that are persisted by the store.</param>
 public static Expression <Func <TStoredEvent, bool> > ToExpression <TObjectId, TBaseEvent, TStoredEvent>(
     this IQueryableEventStore <TObjectId, TBaseEvent, TStoredEvent> store,
     EventQueryCriteria <TObjectId> criteria,
     Func <Type, string> typeNameConverter)
     where TStoredEvent : class, IStoredEvent <TObjectId>
 {
     return(new CriteriaBuilder <TObjectId, TStoredEvent>(criteria, typeNameConverter).Build());
 }
예제 #3
0
    public IEnumerable <TBaseEvent> Query(EventQueryCriteria <TObjectId> criteria)
    {
        var expr   = criteria.ToExpression(this, type => type.FullName);
        var events = this.Events;

        if (expr != null)
        {
            events = events.Where(expr);
        }

        return(events.Select(x => x.Event));
    }
예제 #4
0
        public IEnumerable <DomainEvent> Query(EventQueryCriteria <Guid> criteria)
        {
            // Both forms are available.
            var expr2 = criteria.ToExpression(this, type => type.Name);
            var expr  = this.ToExpression(criteria, type => type.Name);

            if (expr == null)
            {
                return(this.events.Select(x => x.Event));
            }

            return(this.events.AsQueryable().Where(expr).Select(x => x.Event));
        }
예제 #5
0
    /// <summary>
    /// Queries the event store for events that match the given criteria.
    /// </summary>
    public virtual IEnumerable <TBaseEvent> Query(EventQueryCriteria <Guid> criteria)
    {
        var predicate = this.ToExpression(criteria, this.TypeNameConverter);
        var events    = this.Events.AsQueryable();

        if (predicate != null)
        {
            events = events.Where(predicate).Cast <StoredEvent>();
        }

        return(events
               .OrderBy(x => x.RowVersion)
               // Executes the query against the database
               .AsEnumerable()
               // Dehydrates using the configured serializer.
               .Select(x => this.Serializer.Deserialize <TBaseEvent>(x.Payload)));
    }
        private Expression <Func <TStoredEvent, bool> > AddEventFilter(Expression <Func <TStoredEvent, bool> > result)
        {
            var criteria = default(Expression <Func <TStoredEvent, bool> >);

            foreach (var filter in this.criteria.EventTypes)
            {
                var sourceType = typeNameConverter.Invoke(filter);

                // ORs all event filters.
                criteria = Or(criteria, e => e.EventType == sourceType);
            }

            if (criteria == null)
            {
                return(result);
            }

            // AND the criteria built so far.
            return(And(result, criteria));
        }
 public CriteriaBuilder(EventQueryCriteria <TObjectId> criteria, Func <Type, string> typeNameConverter)
 {
     this.criteria          = criteria;
     this.typeNameConverter = typeNameConverter;
 }
예제 #8
0
 public IEnumerable <TBaseEvent> Query(EventQueryCriteria <TObjectId> criteria)
 {
     return(this.Events.Where(this.ToExpression(criteria, type => type.FullName)).Select(x => x.Event));
 }
예제 #9
0
파일: Program.cs 프로젝트: netfx/extensions
			public IEnumerable<DomainEvent> Query(EventQueryCriteria<Guid> criteria)
			{
				throw new NotImplementedException();
			}
예제 #10
0
 public IEnumerable <DomainEvent> Query(EventQueryCriteria <Guid> criteria)
 {
     throw new NotImplementedException();
 }