private Expression WrapWithIncludeCall(Expression expression) { var elementType = HarshQueryable .ExtractElementTypes(expression.Type) .FirstOrDefault(); if (elementType == null) { return expression; } var includeCall = IncludeMethodCallExpression.TryExtend(expression); if (includeCall == null) { includeCall = new IncludeMethodCallExpression(elementType, expression); } includeCall = includeCall.Update( includeCall.Object, Visit(includeCall.Retrievals) ); return includeCall.Reduce(); }
private Expression WrapWithIncludeCall(Expression expression) { var elementType = HarshQueryable .ExtractElementTypes(expression.Type) .FirstOrDefault(); if (elementType == null) { return(expression); } var includeCall = IncludeMethodCallExpression.TryExtend(expression); if (includeCall == null) { includeCall = new IncludeMethodCallExpression(elementType, expression); } includeCall = includeCall.Update( includeCall.Object, Visit(includeCall.Retrievals) ); return(includeCall.Reduce()); }
protected override Expression VisitMethodCall(MethodCallExpression node) { if (node == null) { throw Logger.Fatal.ArgumentNull(nameof(node)); } return(Logger.Method(nameof(VisitMethodCall), node).Invoke(() => { var includeCall = IncludeMethodCallExpression.TryExtend(node); if (includeCall != null) { return VisitIncludeCall(includeCall); } return base.VisitMethodCall(node); })); }
private Expression VisitIncludeCall(IncludeMethodCallExpression includeCall) { var retrievals = includeCall.Retrievals; var canRecurse = DepthLimiter.CanRecurse(includeCall.ElementType); using (DepthLimiter.Enter(includeCall.ElementType)) { if (canRecurse) { retrievals = new ReadOnlyCollection<Expression>( retrievals .Concat( Owner.GetRetrievalsCore(includeCall.ElementType) ) .ToArray() ); } Logger.Debug( "RetrievalAppendingVisitor retrievals to include: {Retrievals}", retrievals ); if (retrievals.Any()) { var updated = includeCall.Update( Visit(includeCall.Object), Visit(retrievals) ); return updated.Reduce(); } return Visit(includeCall.Object); } }
private Expression VisitIncludeCall(IncludeMethodCallExpression includeCall) { var retrievals = includeCall.Retrievals; var canRecurse = DepthLimiter.CanRecurse(includeCall.ElementType); using (DepthLimiter.Enter(includeCall.ElementType)) { if (canRecurse) { retrievals = new ReadOnlyCollection <Expression>( retrievals .Concat( Owner.GetRetrievalsCore(includeCall.ElementType) ) .ToArray() ); } Logger.Debug( "RetrievalAppendingVisitor retrievals to include: {Retrievals}", retrievals ); if (retrievals.Any()) { var updated = includeCall.Update( Visit(includeCall.Object), Visit(retrievals) ); return(updated.Reduce()); } return(Visit(includeCall.Object)); } }