コード例 #1
0
        protected override Expression VisitMethodCall(MethodCallExpression m)
        {
            if (m.IsSelectHtmlMethod())
            {
                Expression iterator = m.Arguments[0];
                Expression nullPropagatingIterator = new MemberAccessNullPropagateVisitor().Rewrite(iterator);

                PropertyPath iteratorPath = CreatePropertyPath(iterator);

                Expression iteratorRoot = GetIteratorRoot(iterator);

                Expression rootInstanceParameter = iteratorRoot ?? Expression.Constant(null, typeof(object));
                ConstantExpression propertyPathParameter = Expression.Constant(iteratorPath);

                MethodCallExpression callExpression = Expression.Call(m.Method,
                                                                      nullPropagatingIterator,
                                                                      rootInstanceParameter,
                                                                      propertyPathParameter,
                                                                      Visit(m.Arguments[3]));
                return callExpression;
            }
            return base.VisitMethodCall(m);
        }