示例#1
0
            public static int CountReferences(Expression node)
            {
                var visitor = new QueryReferenceCounter(node.Type);

                visitor.Visit(node);
                return(visitor._queryReferenceCount);
            }
示例#2
0
            protected override Expression VisitMember(MemberExpression node)
            {
                var result = (MemberExpression)base.VisitMember(node);

                if (QueryReferenceCounter.CountReferences(result.Expression) > 1)
                {
                    return(ConditionalQueryReferenceMemberExpressionRewriter.Rewrite(result.Expression, node));
                }
                return(result);
            }
示例#3
0
            protected override Expression VisitMethodCall(MethodCallExpression node)
            {
                var result       = (MethodCallExpression)base.VisitMethodCall(node);
                var isExtension  = node.Method.GetCustomAttributes <ExtensionAttribute>().Any();
                var methodObject = isExtension ? node.Arguments[0] : node.Object;

                if (methodObject != null && QueryReferenceCounter.CountReferences(methodObject) > 1)
                {
                    return(ConditionalQueryReferenceMethodCallExpressionRewriter.Rewrite(methodObject, node));
                }
                return(result);
            }