public object Execute(Expression expression) { var resultVisitor = new IncludeRewriterVisitor(); expression = resultVisitor.Modify(expression); if (resultVisitor.Count) { return(_queryProvider.Execute(expression)); } if (resultVisitor.SkipTake) { expression = RemoveSkipAndTake(expression); } try { return(ExecuteInternalMethod.MakeGenericMethod(Type).Invoke(this, new object[] { expression, resultVisitor })); } catch (TargetInvocationException e) { ExceptionDispatchInfo.Capture(e.InnerException).Throw(); throw; } }
public async Task <TResult> ExecuteAsync <TResult>(Expression expression, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var resultVisitor = new IncludeRewriterVisitor(); expression = resultVisitor.Modify(expression); if (resultVisitor.Count) { return(await _queryProvider.ExecuteAsync <TResult>(expression, cancellationToken)); } if (resultVisitor.SkipTake) { expression = RemoveSkipAndTake(expression); } try { dynamic task = ExecuteInternalAsyncMethod.MakeGenericMethod(Type) .Invoke(this, new object[] { expression, resultVisitor, cancellationToken }); return(await task.ConfigureAwait(false)); } catch (TargetInvocationException e) { ExceptionDispatchInfo.Capture(e.InnerException).Throw(); throw; } }
public IFutureEnumerable <TResult> ExecuteFuture <TResult>(Expression expression) { var resultVisitor = new IncludeRewriterVisitor(); expression = resultVisitor.Modify(expression); if (resultVisitor.SkipTake) { expression = RemoveSkipAndTake(expression); } return(ExecuteQueryTreeFuture <TResult>(expression)); }
public IFutureValue <TResult> ExecuteFutureValue <TResult>(Expression expression) { var resultVisitor = new IncludeRewriterVisitor(); expression = resultVisitor.Modify(expression); if (resultVisitor.Count) { return(_queryProvider.ExecuteFutureValue <TResult>(expression)); } if (resultVisitor.SkipTake) { expression = RemoveSkipAndTake(expression); } return(ExecuteQueryTreeFutureValue <TResult>(expression)); }