protected string GetSourceVarName(MemberExpression expression) { string sourceVarName = null; if (expression.Expression is QuerySourceReferenceExpression) { var querySource = expression.Expression as QuerySourceReferenceExpression; Expression mappedExpression; if (QueryBuilder.TryGetQuerySourceMapping(querySource.ReferencedQuerySource, out mappedExpression) && mappedExpression is SelectVariableNameExpression) { sourceVarName = (mappedExpression as SelectVariableNameExpression).Name; } else { sourceVarName = querySource.ReferencedQuerySource.ItemName; QueryBuilder.AddQuerySourceMapping( querySource.ReferencedQuerySource, new SelectVariableNameExpression(querySource.ReferencedQuerySource.ItemName, VariableBindingType.Resource, querySource.ReferencedQuerySource.ItemType)); } } else if (expression.Expression is MemberExpression) { var memberExpression = VisitExpression(expression.Expression); if (memberExpression is SelectVariableNameExpression) { sourceVarName = (memberExpression as SelectVariableNameExpression).Name; } } return(sourceVarName); }