protected override Expression VisitMemberExpression (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 = VisitExpression (expression.Expression);
var resolved = _stage.ResolveMemberAccess (sourceExpression, expression.Member, _resolver, _context);
Assertion.DebugAssert (resolved != expression);
return VisitExpression (resolved);
}