protected override object ExecuteImpl(Expression expression, Type itemType)
        {
            var query = (RelativesAwareTranslatedQuery)WiqlQueryBuilder.BuildQuery(expression);

            var results = query.WillEverHaveResults()
                ? ExecuteRawQuery(query.UnderlyingQueryType, query.ToQueryString())
                : Activator.CreateInstance(typeof(List <>).MakeGenericType(query.UnderlyingQueryType)) as IEnumerable;

            if (query.Relatives != null)
            {
                var asOf = query.AsOfDateTime ?? DateTime.Now;
                results = GetRelatives(results.Cast <IIdentifiable>(), query.Relatives, itemType, asOf);
            }
            else if (query.Projections.Count > 0)
            {
                return(Projector.Project(query.Projections, results.Cast <object>()));
            }

            return(results);
        }