private Maybe<string> GetPropertyName(Expression expr, int exprPos)
{
var maybePropName = expr
.MaybeAs<MemberExpression>().Select(x => x.Member.Name)
.OrElse(() => DynamicDictionary.GetAlias(expr, exprPos))
.OrElse(() => GetConditionName(expr, exprPos))
.OrElse(() => GetEnumerableRootName(expr, exprPos))
.OrElse(() => GetMethodName(expr));
return maybePropName;
}