protected override Expression VisitMember(MemberExpression expression) { ArgumentUtility.CheckNotNull("expression", expression); // First process any nested expressions // E.g, for (kitchen.Cook).FirstName, first process kitchen => newExpression1 (SqlEntity) // then newExpression1.Cook => newExpression2 (SqlEntityRef/SqlEntity) // then newExpression2.FirstName => result (SqlColumn) var sourceExpression = Visit(expression.Expression); var resolved = _stage.ResolveMemberAccess(sourceExpression, expression.Member, _resolver, _context); Assertion.DebugAssert(resolved != expression); return(Visit(resolved)); }