Exemple #1
0
            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);
                }));
            }