public Task <long> RemoveAllAsync(string organizationId, string clientIpAddress, DateTime?utcStart, DateTime?utcEnd, CommandOptionsDescriptor <PersistentEvent> options = null)
        {
            if (String.IsNullOrEmpty(organizationId))
            {
                throw new ArgumentNullException(nameof(organizationId));
            }

            var query = new RepositoryQuery <PersistentEvent>().Organization(organizationId);

            if (utcStart.HasValue && utcEnd.HasValue)
            {
                query = query.DateRange(utcStart, utcEnd, InferField(e => e.Date)).Index(utcStart, utcEnd);
            }
            else if (utcEnd.HasValue)
            {
                query = query.ElasticFilter(Query <PersistentEvent> .DateRange(r => r.Field(e => e.Date).LessThan(utcEnd)));
            }
            else if (utcStart.HasValue)
            {
                query = query.ElasticFilter(Query <PersistentEvent> .DateRange(r => r.Field(e => e.Date).GreaterThan(utcStart)));
            }

            if (!String.IsNullOrEmpty(clientIpAddress))
            {
                query = query.FieldEquals(EventIndex.Alias.IpAddress, clientIpAddress);
            }

            return(RemoveAllAsync(q => query, options));
        }