protected override DbExpression VisitMemberAccess(MemberExpression exp)
        {
            ParameterExpression p;

            if (ExpressionExtension.IsDerivedFromParameter(exp, out p))
            {
                IObjectModel model = this.FindModel(p);
                return(model.GetDbExpression(exp));
            }

            if (IsComeFrom_First_Or_FirstOrDefault(exp))
            {
                DbExpression dbExpression = this.Process_MemberAccess_Which_Link_First_Or_FirstOrDefault(exp);
                return(dbExpression);
            }
            else
            {
                return(base.VisitMemberAccess(exp));
            }
        }