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); }