public virtual IEnumerable <TResult> GetOrAddQueryResults <TResult>([NotNull] QueryTableRequest <TResult> request) { Check.NotNull(request, "request"); return(_requestCache.GetOrAdd(new QueryKey(request.Table, request.Query), q => Connection .ExecuteRequest(request, Logger) .ToList() // prevent multiple execution ).Cast <TResult>()); }
private static IEnumerable <TResult> ExecuteSelectExpression <TResult>(QueryContext queryContext, IEntityType entityType, SelectExpression selectExpression) where TResult : class, new() { var context = ((AtsQueryContext)queryContext); var table = new AtsTable(entityType.TableName()); var query = context.TableQueryGenerator.GenerateTableQuery(selectExpression); var request = new QueryTableRequest <TResult>( table, query, s => (TResult)context.QueryBuffer.GetEntity( entityType, context.ValueReaderFactory.Create(entityType, s))); return(context.GetOrAddQueryResults(request)); }